У меня возникли проблемы с использованием array_diff правильно. У меня есть 2 массивы:Как использовать array_diff для получения недостающего элемента
$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. Как мне это получить?
использование 'print_r (array_diff ($ arr_1_simple, $ arr_2_simple))' вместо этого! – MH2K9
Вы получаете все предметы в $ arr_2, которые не находятся в $ arr_1. И запись 0, и запись 2 не находятся в массиве 1. –
Спасибо. Не заметил этого до сих пор. –