2012-03-29 6 views
3

Предположим, что у меня есть два массива следующим образом:Я хочу, чтобы сравнить два массива в PHP

$array1 = array(1, 3, 5); 
$array2 = array('x'=> 1, 'y'=> 2, 'z'=> 5); 

Как проверить, что два массива точно так же в наиболее эффективным и надлежащим образом, и это не волнует ключевые слова * $ array2.

Я хочу создать функцию, которая должна возвращать значение true, если значения являются точно такими же, и false, если какой-либо из них отличается как по значению, так и по количеству элементов.

Спасибо за ваше время и внимание.

+1

, если вы хотите проверить значения, используйте функцию 'array_values' для второго массива, а затем проверьте равенство –

+1

относительно * точно так же *, а как насчет порядка элементов? – Yoshi

+0

Тогда, tbh, я бы предложил просто (после сравнения длины) пройти один массив и проверить строгое равенство ('===') обоих элементов. Таким образом вы можете вернуть false на первый элемент, не равный. – Yoshi

ответ

3
array_values($array1) === array_values($array2) 

Предполагая, что массивы имеют одинаковый порядок.

+0

Преобразование результата 'array_values ​​()' в строку, независимо от содержимого массива, всегда приведет к литеральной строке 'Array', поэтому это всегда будет верно. – DaveRandom

+0

@DaveRandom Спасибо, товарищ, tottaly пропустил это – dotoree

+0

Да, спасибо @dotoree, он хорошо работает. – Thavarith

4

В простейшем случае вы можете просто использовать array_diff. Он игнорирует ключи во втором массиве, а также порядок значений. Это вернет пустое множество, если массивы равны:

if (count(array_diff($array1, $array2)) == 0) { 
    // equal 

Вы также мог бы сравнить массивы непосредственно после удаления ключей от второго:

if ($array1 == array_values($array2)) { 

Это будет дополнительно сравнить порядок содержащихся значений ,

+1

Я думаю, что второй пример, вероятно, лучше всего передать оба массива через 'array_values ​​()', так как в этой ситуации вы не можете знать, что ключи '$ array1' являются смежными без цикла для проверки, а 'array_values ​​()' исправляет это. Также вы можете спокойно проверить результат 'array_diff()' как логический в этом примере, 'if (! Array_diff ($ array1, $ array2)) {// equal' достаточно безопасен и не имеет накладных расходов на вызов на 'count()'. – DaveRandom

+0

Спасибо @mario, я думаю, что второй, используя array_values, хорошо работает. – Thavarith

+0

Он хорошо работает при условии, что мы конвертируем оба массива с помощью array_values ​​и сравниваем === – Thavarith

0

так:

<?php  
$array1 = array ("a" => "green", "b" => "brown", "c" => "blue", "red");  
$array2 = array ("a" => "green", "yellow", "red");  
$result = array_diff($array1, $array2);  
if(count($result) == 0) 
{ 
    ....... 
}  
?> 
+0

Спасибо @Code Monkey, в этом случае, что, если вторые массивы: $ array2 содержит значения sames как $ array1, а $ array2 также имеет дополнительный элемент? array_diff вернет 0 ... так что если условие станет истинным ... что не – Thavarith

1

Попробуйте

$array1 = array(1, 3, 5); 
$array2 = array('x'=> 1, 'y'=> 2, 'z'=> 5); 
$array2 = array_values($array2); 
echo $array1 == $array2 ? 'true' : 'false'; 
+0

Благодаря @Uday Sawant, он работает так хорошо! – Thavarith

+0

Это хорошо работает при условии, что мы конвертируем оба массива с использованием array_values ​​и сравниваем === – Thavarith

0

array_diff будет делать работу за вас:

<?php 
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 
if(empty($result)){ 
    // arrays contain the same values! 
} 

?> 
+0

Спасибо @Paul Bain, в этом случае, что, если вторые массивы: $ array2 содержит значения sames как $ array1, а $ array2 также имеет дополнительный элемент? array_diff вернет 0 ... так что if-condition станет true ..., который не является – Thavarith

+0

array_diff возвращает массив, содержащий элементы, которые не находятся в обоих массивах. Если элемент находится в array2, но не array1, array_diff вернет массив, содержащий этот элемент. В этом случае пустой ($ result) будет равен false, и поэтому проверка верна. - http://php.net/array_diff –

+0

Нет, array_diff возвращает результат разных $ array1, а не $ array2. я это проверил. – Thavarith

Смежные вопросы