В PHP функция array_diff_assoc() предназначена для поиска разницы между двумя массивами при определении приоритета ключ-значение пары. Однако при использовании этой функции для фильтрации строк из 2D-массива на основе пересечения с другим 2D-массивом она не всегда может дать ожидаемые результаты.
Проблема возникает из-за строгое сравнение, выполняемое array_diff_assoc(). Во время сравнения он сравнивает строковые представления пар ключ-значение. Это означает, что даже если две пары ключ-значение содержат одинаковые значения, они не считаются равными, если их строковые представления не идентичны.
Рассмотрите следующие примеры данных:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
Когда мы пытаемся использовать array_diff_assoc() для фильтрации $array1 на основе строк в $array2, мы получаем неправильный вывод:
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
Эти выходные данные показывают, что в результате присутствует общая строка, тогда как предполагаемый вывод должен содержать исключительную строку из $array1.
Как упоминалось ранее, проблема заключается в строгом сравнении, выполняемом array_diff_assoc(). При сравнении следующих двух массивов:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
функция возвращает в качестве результата другую пару ключ-значение, поскольку пары ключ-значение не являются строковыми.
Чтобы решить эту проблему, мы можем использовать немного другой подход, который проверяет наличие определенных значений ключа в массивах:
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
Этот подход использует in_array() для проверки наличия каждой строки из $array1 в $array2. Если строка отсутствует в $array2, она включается в отфильтрованные результаты.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3