2014-11-02 4 views
2

У меня возникли проблемы с использованием 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. Как мне это получить?

+0

использование 'print_r (array_diff ($ arr_1_simple, $ arr_2_simple))' вместо этого! – MH2K9

+1

Вы получаете все предметы в $ arr_2, которые не находятся в $ arr_1. И запись 0, и запись 2 не находятся в массиве 1. –

+0

Спасибо. Не заметил этого до сих пор. –

ответ

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;} 
+0

А это то, что я только что видел. Спасибо. –

1

array_diff($arr1, $arr2). Here$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] 

 Смежные вопросы

  • Нет связанных вопросов^_^