У меня проблемы с использованием array_diff правильно.
У меня есть 2 массива:
$arr_1 = array(
0 => array('name' => 'Day Rate 2', 'from' => 1200, 'to' => 1400),
1 => array('name' => 'Day Rate 2', 'from' => 2000, 'to' => 2000),
);
$arr_2 = array(
0 => array('name' => 'Day Rate 2', 'from' => 0, 'to' => 1000),
1 => array('name' => 'Day Rate 2', 'from' => 1200, 'to' => 1400),
2 => array('name' => 'Day Rate 3', 'from' => 2000, 'to' => 4000),
);
Я хочу получить значения в $ arr_2 которые не присутствуют в $ arr_1. Я хочу вернуть это:
0 => array('name' => 'Day Rate 2', 'from' => 0, 'to' => 1000)
Чтобы сравнить их, я сначала сериализовал значения каждого элемента и создал эти два сериализованных массива, которые я могу использовать для сравнения, используя array_diff.
foreach ($arr_1 as $key => $val) {
$arr_1_simple[$key] = serialize(array($val['from'], $val['to']));
}
foreach ($arr_2 as $key => $val) {
$arr_2_simple[$key] = serialize(array($val['from'], $val['to']));
}
Array
(
[0] => a:2:{i:0;i:1200;i:1;i:1400;}
[1] => a:2:{i:0;i:2000;i:1;i:2000;}
)
Array
(
[0] => a:2:{i:0;i:0;i:1;i:1000;}
[1] => a:2:{i:0;i:1200;i:1;i:1400;}
[2] => a:2:{i:0;i:2000;i:1;i:4000;}
)
поскольку a:2:{i:0;i:1200;i:1;i:1400;}
а также a:2:{i:0;i:2000;i:1;i:4000;}
находятся как в $ arr_1, так и в $ arr_2, нечетный a:2:{i:0;i:0;i:1;i:1000;}
, что я и думал, что array_diff вернет.
Тем не менее, результат, который я получаю:
print_r(array_diff($arr_2_simple, $arr_1_simple));
Array
(
[0] => a:2:{i:0;i:0;i:1;i:1000;}
[2] => a:2:{i:0;i:2000;i:1;i:4000;}
)
Может кто-нибудь сказать мне, почему a:2:{i:0;i:2000;i:1;i:4000;}
возвращается? Я хочу, чтобы все элементы в $ arr_2 отсутствовали в $ arr_1. Как мне это получить?
Ваше значение в массиве 1
[1] => a:2:{i:0;i:2000;i:1;i:2000;}
не соответствует значению в массиве 2
[2] => a:2:{i:0;i:2000;i:1;i:4000;}
array_diff($arr1, $arr2)
, Вот $arr1
массив для сравнения и $arr2
массив для сравнения Функция возвращает массив, содержащий все записи из $ arr1, которых нет $ arr2. пример
Случай 1 array_diff($arr1, $arr2)
$arr1 = [1, 2, 3];
$arr2 = [1,3, 4];
print_r(array_diff($arr1, $arr2)); //Output: [2]
Дело: 2 array_diff($arr2, $arr1)
$arr1 = [1, 2, 3];
$arr2 = [1,3, 4];
print_r(array_diff($arr2, $arr1)); //output: [4]