PHP documentation ясно заявляетОшибка PHP array_diff?
Сравнивает array1 против одного или нескольких других массивов и возвращает значения в array1, которые не присутствуют ни в одном из других массивов.
Это не совсем так. Рассмотрим следующий пример
$a = array(1,2,3,4);
$b = array(3,4,5);
echo "b FROM a = ";
echo json_encode(array_diff($a,$b));
echo "<br>a FROM b = ";
echo json_encode(array_diff($b,$a));
который возвращает
b FROM a = [1,2]
a FROM b = {"2":5}
т.е. простом массиве в одном случае и ассоциативного массива в другой. Легко исправлено - я только забочусь о значениях, поэтому могу просто сделать array_values(array_diff
. Однако меня беспокоит, что документация заслоняет эту разницу. Возможно, кто-то здесь может проливать больше света на то, что происходит?
Подсказка: используйте 'print_r'/'var_dump' для отладки PHP v alues. Внедрение целой «новой технологии» (JSON) в микс просто усложняет ситуацию ... – deceze
Хорошая точка. Я часто использую json_encode просто потому, что результат более компактный. – DroidOS