2013-05-10 1 views
-1

У меня есть этот код:Почему array_diff() сравнивает два разных массива как одинаковые и возвращает пустой результат?

$a1 = array(31001); 
$a2 = array(31001, 31002); 
$diff = array_diff($a1, $a2); 
var_dump($diff); 

Я ожидал, что array_diff вернется array(0 => 31002) в соответствии с PHP документации:

Возвращает массив, содержащий все записи array1, не ни в одном из другие массивы.

Однако опубликованный код возвращает пустой массив. Кто-нибудь может объяснить мне, почему это происходит и как получить правильный результат?

Адрес PHPfiddle example.

Спасибо за любую помощь или полезные подсказки.

+0

Смешной попробовать '$ дифф = array_diff ($ a2, $ a1);' ^^ – HamZa

+0

Это возвращает именно то, что находится в массиве 1, а не в массиве 2 (ничего тогда). – Voitcus

ответ

4

Внимательно прочитайте документацию. Набор значений, который присутствует в $a1 и отсутствует в $a2, пуст: $a1 содержит только один элемент (31001), который также присутствует в $a2.

Вы хотите, чтобы получить все значения, которые присутствуют в $a2, но не в $a1, так что вы должны изменить порядок массивов, вы передаете array_diff():

$diff = array_diff($a2, $a1); 
+0

Спасибо, это приносит звонок. Я думал, что порядок массивов не имеет значения. – Frodik

2

попробовать это, он будет работа

$diff = array_diff($a2, $a1); 

это даст

Array 
(
[1] => 31002 
) 

но при попытке

$a1 = array(31001); 
$a2 = array(31002, 31001); 
$diff = array_diff($a2, $a1); 

это даст

Array 
    (
[0] => 31002 
) 

array_diff будет возвращать массив (0 => 31002), только в таком состоянии, это связано для индексации местоположения элементов

0
<?php 

$a1 = array(31001); 
$a2 = array(31002); 
$diff = array_diff($a1, $a2); 

var_dump($diff) 

?> 

добавить в $ a2 = массив() один элемент

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

  • Нет связанных вопросов^_^