array_diff не всегда корректен

Я показываю мой пример 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?
Как это починить?

0

Решение

Это работает правильно. В соответствии с array_diff() документация:

массив array_diff (массив $ array1, массив $ array2 [, массив $ …])

Сравнивает массив1 с одним или несколькими другими массивами и возвращает
значения в массиве1, которых нет ни в одном из других массивов.

Еще одна важная информация из документации:

Два элемента считаются равными тогда и только тогда, когда (строка) $ elem1 ===
(строка) $ elem2. На словах: когда строковое представление одинаково.

Так в $answers Массива нет k, B, Y элементы $fields массив.

2

Другие решения

Метод не неправильный, сравните 2 списка, они оба содержат b

2

увидим, что вы поместили ‘b’ в массив $ answer и массив $ fields.

вот почему он дает такой вывод.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector