2014-11-04 6 views
1

У меня есть 2 многомерных массива.Как получить разницу в массивах

Array1, содержащий некоторые из доступных имен:

Array1 
(
[0] => Array 
    (
     [quantity] => 13 
     [idname] => 3 
     [x_name] => Name-3 
    ) 

[1] => Array 
    (
     [quantity] => 5 
     [idname] => 4 
     [x_name] => Name-4 
    ) 

) 

и array2, содержащих все доступные имена:

Array2 
(
    [0] => Array 
     (
      [id_x] => 3 
      [x_name] => Name-3 
      [id_l] => 4 
     ) 

    [1] => Array 
     (
      [id_x] => 4 
      [x_name] => Name-4 
      [id_l] => 8 
     ) 

    [2] => Array 
     (
      [id_x] => 5 
      [x_name] => Name-5 
      [id_l] => 7 
     ) 

    [3] => Array 
     (
      [id_x] => 6 
      [x_name] => Name-6 
      [id_l] => 5 
     ) 

) 

Array1 [] [idname] = array2 [] [id_x] и Array1 [] [x_name] = Array2 [] [x_name] (ofc ...)

Моим результатом вывода будет каждый элемент из массива Array2, который не содержит Array1 ... так:

Arraydesire 
(

    [0] => Array 
     (
      [id_x] => 5 
      [x_name] => Name-5 
      [id_l] => 7 
     ) 

    [1] => Array 
     (
      [id_x] => 6 
      [x_name] => Name-6 
      [id_l] => 5 
     ) 

) 

Я пробовал с array_intersect, но не работал. Спасибо за любую помощь.

+0

http://php.net/manual/en/function.array -diff.php – DarkBee

ответ

2

Вы можете использовать вложенные петли foreach. Если значение из текущего элемента массив2 находится в array1, удалить элемент:

foreach($array2 as $key => $value){ 
    foreach($array1 as $val){ 
     if($value['x_name']==$val['x_name']){ 
      unset($array2[$key]); 
      $break; 
     } 
    } 
} 
var_dump($array2); 

Живой пример: http://codepad.viper-7.com/eOOUi6

+0

Спасибо. Это действительно полезно! – TomLi

0

Посмотрите на array_diff (http://php.net/manual/en/function.array-diff.php),

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 
print_r($result); 

Array 
(
    [1] => blue 
) 

неудачу, что вам может понадобиться, чтобы написать цикл, который проходит через массив2 и видит, если его в array1, если его не добавить его в новый массив и выход, который массив

0
<?php 
$arr1 = Array(); 
$arr1[] = Array('quantity' => 13, 'idname' => 3, 'x_name' => 'Name-3'); 
$arr1[] = Array('quantity' => 5, 'idname' => 4, 'x_name' => 'Name-4'); 


$arr2 = Array(); 
$newTemp = Array(); 
$arr2[] = Array('id_x' => 3, 'x_name' => 'Name-3', 'id_l' => 4); 
$arr2[] = Array('id_x' => 4, 'x_name' => 'Name-4', 'id_l' => 8); 
$arr2[] = Array('id_x' => 5, 'x_name' => 'Name-5', 'id_l' => 7); 
$arr2[] = Array('id_x' => 6, 'x_name' => 'Name-6', 'id_l' => 5); 

$newTemp = $arr2; 
foreach ($arr1 as $subArray1) { 
    foreach ($arr2 as $key => $subArray2) { 
     if ($subArray1['x_name']==$subArray2['x_name']) { 
      unset($newTemp[$key]); 
      break; 
     } 
    } 
} 
print_r($arr1); 
print_r($arr2); 
print_r($newTemp); 
?> 
Смежные вопросы