Я показываю мой пример diff между значениями в массивах, иногда не работает в принципе.
$fields = array(
'1x1' => 'k',
'1x2' => 'B',
'1x3' => 'c',
'2x1' => 'd',
'2x2' => 'x',
'2x3' => 'Y',
'3x1' => 'b',
'3x2' => 'e',
'3x3' => 'f'
);
print_r($fields);
$answer = array(
'a',
'b',
'c',
'd',
'x',
'y',
'z',
'e',
'f'
);
print_r($answer);
echo '<hr />DIFF:<br />';
print_r(array_diff($fields, $answer));
?>
Результаты:
(
[1x1] => k
[1x2] => B
[2x3] => Y
)
Но должно быть:
(
[1x1] => k
[1x2] => B
[2x3] => Y
[3x1] => b
)
Почему для PHP b
равно z
?
Как это починить?
Это работает правильно. В соответствии с array_diff()
документация:
массив array_diff (массив $ array1, массив $ array2 [, массив $ …])
Сравнивает массив1 с одним или несколькими другими массивами и возвращает
значения в массиве1, которых нет ни в одном из других массивов.
Еще одна важная информация из документации:
Два элемента считаются равными тогда и только тогда, когда (строка) $ elem1 ===
(строка) $ elem2. На словах: когда строковое представление одинаково.
Так в $answers
Массива нет k, B, Y
элементы $fields
массив.
Метод не неправильный, сравните 2 списка, они оба содержат b
увидим, что вы поместили ‘b’ в массив $ answer и массив $ fields.
вот почему он дает такой вывод.