Как получить разницу массивов

У меня есть 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, но не работал.
Спасибо за любую помощь.

1

Решение

Вы можете использовать вложенные циклы foreach. Если значение из текущего элемента array2 найдено в 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

2

Другие решения

Посмотрите на 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
)

в противном случае вам может понадобиться написать цикл, который проходит через array2 и видит, находится ли он в 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);
?>
0
По вопросам рекламы [email protected]