我想要合并两个数组,但是从第二个数组中省略了与值匹配的元素。 (id
和otherId
)
我知道如何在第一个循环中使用第二个循环实现这一点,但我想知道是否可以使用单个循环或特定的php函数实现这一点?
这是我现在正在做的一个例子:
foreach ($array1 as $item)
{
$id = $item['id'];
foreach ($array2 as $key => $item)
{
if ($item['otherId'] == $id)
{
unset($array2[$key]);
}
}
}
$output = array_merge($array1, $array2);
两个阵列中都会有很多元素,所以我正在寻找最有效的方法。
数组示例:
$array1 = [
[
'id' => 1
'name' => 'item 1'
],
[
'id' => 2
'name' => 'item 2'
],
[
'id' => 3
'name' => 'item 3'
],
[
'id' => 4
'name' => 'item 4'
]
];
$array2 = [
[
'id' => 1,
'otherId' => 2,
'name' => 'item 2'
],
[
'id' => 2,
'otherId' => 3,
'name' => 'item 3'
],
[
'id' => 3,
'otherId' => null,
'name' => 'item 4'
],
[
'id' => 4,
'otherId' => null,
'name' => 'item 5'
]
];
$output = [
[
'id' => 1
'name' => 'item 1'
],
[
'id' => 2
'name' => 'item 2'
],
[
'id' => 3
'name' => 'item 3'
],
[
'id' => 4
'name' => 'item 4'
],
[
'id' => 3,
'otherId' => null,
'name' => 'item 4'
],
[
'id' => 4,
'otherId' => null,
'name' => 'item 5'
]
];
答案 0 :(得分:2)
你的意思是:
<?php
$array1 = array(
array(
'id' => 1,
'name' => 'item 1'
),
array(
'id' => 2,
'name' => 'item 2'
),
array(
'id' => 3,
'name' => 'item 3'
),
array(
'id' => 4,
'name' => 'item 4'
)
);
$array2 = array(
array(
'id' => 1,
'otherId' => 2,
'name' => 'item 2'
),
array(
'id' => 2,
'otherId' => 3,
'name' => 'item 3'
),
array(
'id' => 3,
'otherId' => null,
'name' => 'item 4'
),
array(
'id' => 4,
'otherId' => null,
'name' => 'item 5'
)
);
$output = $array1;
for($i=0,$c=sizeof($array2);$i<$c;$i++){
if(is_null($array2[$i]['otherId']))
array_push($output, $array2[$i]);
}
var_dump($output);
实例see here
你也可以直接将array_push()放入$ array1中以减少内存使用量。示例here
答案 1 :(得分:0)
这个功能怎么样:
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['uid'] === $id) {
return $key;
}
}
return null;
}
您可以使用它来搜索数组。 为了避免混淆,我只是粘贴它以便更容易看到解决方案。由于https://stackoverflow.com/a/6661561/1238227
,可以在@Jakub Truneček找到完整的解决方案