Hướng dẫn php check if two arrays have same values - php kiểm tra xem hai mảng có cùng giá trị hay không

Các câu trả lời đã cho chứa nhiều quirks khác nhau chứng minh đây không phải là vấn đề đơn giản và xác định "giá trị giống nhau" có nghĩa là gì về phía trước cho miền của bạn là quan trọng. Giải pháp của tôi cho việc này đòi hỏi các mục tiêu thiết kế sau:

  • Cả hai mảng nên được coi là "danh sách".
  • Giải pháp nên hoạt động với các mảng có chứa tất cả các loại (bao gồm các đối tượng, để tương thích với các tính năng như enums).
  • Các yếu tố lặp đi lặp lại nên được hỗ trợ.
  • Các trường hợp không hoạt động nên ném ngoại lệ.

Trường hợp kiểm tra để đánh giá các giải pháp trông giống như:

assertTrue(ArrayUtil::elementsEqual($array1, $array2));
        $this->assertSame($originalArray1, serialize($array1));
        $this->assertSame($originalArray2, serialize($array2));
    }

    /**
     * @dataProvider elementsEqualDataProviderFalseCases
     */
    public function test_elements_are_equal_false_cases(array $array1, array $array2): void {
        $originalArray1 = serialize($array1);
        $originalArray2 = serialize($array2);
        $this->assertFalse(ArrayUtil::elementsEqual($array1, $array2));
        $this->assertSame($originalArray1, serialize($array1));
        $this->assertSame($originalArray2, serialize($array2));
    }

    /**
     * @dataProvider exceptionTestCases
     */
    public function test_elements_are_equal_exceptional_cases(mixed $array1, mixed $array2, string $exception): void {
        $this->expectException($exception);
        $originalArray1 = serialize($array1);
        $originalArray2 = serialize($array2);
        $this->assertFalse(ArrayUtil::elementsEqual($array1, $array2));
        $this->assertSame($originalArray1, serialize($array1));
        $this->assertSame($originalArray2, serialize($array2));
    }

    public function elementsEqualDataProviderTrueCases(): \Generator {
        yield 'Empty arrays' => [
            [],
            [],
        ];
        yield 'Integer types' => [
            [1, 2, 3],
            [3, 2, 1],
        ];
        yield 'Boolean types' => [
            [true, false],
            [false, true],
        ];
        yield 'String types' => [
            ["abc", "def"],
            ["def", "abc"],
        ];
        $objectA = new \stdClass();
        $objectB = new \stdClass();
        yield 'Object types' => [
            [$objectA, $objectB],
            [$objectB, $objectA],
        ];

        $objectC = new \stdClass();
        yield 'Mixed types' => [
            [2, true, "foo", null, $objectC],
            ["foo", null, 2, true, $objectC],
        ];
        yield 'Array types' => [
            [[1, 2], [3, 4]],
            [[3, 4], [1, 2]],
        ];
        yield 'Repeated values' => [
            [1, 1, 2],
            [2, 1, 1],
        ];
    }

    public function elementsEqualDataProviderFalseCases(): \Generator {
        yield 'Integer types' => [
            [1, 2, 3],
            [4, 5, 6],
        ];
        yield 'Boolean types' => [
            [true],
            [false],
        ];
        yield 'String types' => [
            ["abc", "def"],
            ["hij", "abc"],
        ];
        yield 'Object types' => [
            [new \stdClass(), new \stdClass()],
            [new \stdClass(), new \stdClass()],
        ];
        $objectC = new \stdClass();
        yield 'Mixed types' => [
            [2, false, "foo", null, $objectC],
            ["foo", null, 2, true, $objectC],
        ];
        yield 'Array types' => [
            [[1, 2], [3, 4]],
            [[4, 3], [2, 1]],
        ];
        yield 'Repeated values' => [
            [1, 1, 2],
            [2, 2, 1],
        ];
        yield 'Repeated values, longer second argument' => [
            [1, 1, 2],
            [2, 2, 1, 1],
        ];
        yield 'Repeated values, longer first argument' => [
            [1, 1, 2, 2],
            [2, 2, 1],
        ];
    }

    public function exceptionTestCases(): \Generator {
        yield 'Non-list array first argument' => [
            ['foo' => 'bar'],
            [1, 2, 3],
            \InvalidArgumentException::class,
        ];
        yield 'Non-list array second argument' => [
            [1, 2, 3],
            ['foo' => 'bar'],
            \InvalidArgumentException::class,
        ];
        yield 'Non array arguments' => [
            "foo",
            "bar",
            \TypeError::class,
        ];
    }
}

Và giải pháp (được điều chỉnh chủ yếu từ câu trả lời của Seyfahni):

Làm cách nào để kiểm tra xem hai mảng có cùng giá trị trong PHP không?

Hàm mảng_Intersect () so sánh các giá trị của hai mảng (hoặc nhiều hơn) và trả về các trận đấu. Hàm này so sánh các giá trị của hai hoặc nhiều mảng và trả về một mảng chứa các mục từ Array1 có trong Array2, Array3, v.v.array_intersect() function compares the values of two (or more) arrays, and returns the matches. This function compares the values of two or more arrays, and return an array that contains the entries from array1 that are present in array2, array3, etc.

Làm thế nào để bạn kiểm tra xem hai mảng có chứa cùng một giá trị không?

Phương thức mảng.equals () kiểm tra sự bình đẳng của hai mảng về kích thước, dữ liệu và thứ tự của các phần tử. Phương pháp này sẽ chấp nhận hai mảng cần được so sánh và nó trả về kết quả boolean đúng nếu cả hai mảng đều bằng nhau và sai nếu các mảng không bằng nhau.Arrays. equals() method checks the equality of the two arrays in terms of size, data, and order of elements. This method will accept the two arrays which need to be compared, and it returns the boolean result true if both the arrays are equal and false if the arrays are not equal.

Làm thế nào để bạn tìm thấy các giá trị chung của hai mảng?

Cách tiếp cận :..
Nhận hai mảng ..
Tạo hai băm và thêm các phần tử từ các mảng TP các bộ đó ..
Tìm các yếu tố phổ biến trong cả hai bộ sử dụng bộ sưu tập.phương thức retainall ().Phương pháp này chỉ giữ các yếu tố phổ biến của cả hai bộ sưu tập trong Collection1 ..
Đặt 1 bây giờ chỉ chứa các yếu tố phổ biến ..

Làm cách nào để kiểm tra xem một mảng có chứa một mảng khác trong PHP không?

Hàm in_array () là một hàm sẵn có trong PHP được sử dụng để kiểm tra xem một giá trị nhất định có tồn tại trong một mảng hay không.Nó trả về đúng nếu giá trị đã cho được tìm thấy trong mảng đã cho và sai.in_array() function is an inbuilt function in PHP that is used to check whether a given value exists in an array or not. It returns TRUE if the given value is found in the given array, and FALSE otherwise.