У меня есть 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, но не работал.
Спасибо за любую помощь.
Вы можете использовать вложенные циклы 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
Посмотрите на 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, если его нет, добавить его в новый массив и вывести этот массив
<?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);
?>