Задача diff массива с одним массивом содержит ноль, а другие пустые значения - PullRequest
0 голосов
/ 12 сентября 2018

Я использую Laravel. У меня есть 2 массива. Например

$array1 = [
    'test1',
    '',
    'test2',
    'test3',
    '',
    'test4',
    '',
];

$array2 = [
    null
];

dd(array_diff($array1, $array2));

результат

array:4 [▼
  0 => "test1"
  2 => "test2"
  3 => "test3"
  5 => "test4"
]

но я ожидал

array:7 [▼
  0 => "test1"
  1 => ""
  2 => "test2"
  3 => "test3"
  4 => ""
  5 => "test4"
  6 => ""
]

Можете ли вы спросить, почему в array_diff рассматривается null is equal '', и как я могу это исправить без каких-либо дополнительных кодов. Теперь я решил это

foreach ($array1 as $key => $value) {
    if (in_array($value, $array2, true)) {
        unset($array1[$key]);
    }
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Чтобы добавить к тому, что было сказано, вы можете легко отфильтровать их с помощью этого

$array2 = array_filter($array2, function($v){
    return !is_null($v);
});
0 голосов
/ 12 сентября 2018

Как написано в руководстве :

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

Итак, ваше значение null приведено к пустой строке, поэтому вы получите свой результат.Таким образом, вы не можете решить свою задачу без дополнительных кодов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...