我有两个数组如下:
$my = Array ( [0] => 1 [1] => 8 )
$all = Array ( [0] => Array ( [id] => 1 [name] => Lahore ) [1] => Array ( [id] => 2 [name] => Gujrat ) [2] => Array ( [id] => 3 [name] => Rawalpindi ) [3] => Array ( [id] => 4 [name] => Karachi ) [4] => Array ( [id] => 5 [name] => Islamabad ) [5] => Array ( [id] => 6 [name] => Manga ) [6] => Array ( [id] => 7 [name] => Gulberg ) [7] => Array ( [id] => 8 [name] => Muridkey ) [8] => Array ( [id] => 9 [name] => Queta ) )
我想要一个像这样的结果数组:
Array ( [0] => Array ( [id] => 1 [name] => Lahore ) [8] => Array ( [id] => 9 [name] => Queta ) )
我的代码如下:
for($m=0; $m< sizeof($all); $m++){
foreach($my as $key => $value){
if($all[$m]['id'] !== $value){
unset($all[$m]);
break;
}
}
}
答案 0 :(得分:0)
使用array_filter功能仅保存带有来自$ my array
的ID的项目$res = array_filter($all,
function ($x) use($my) {
return in_array($x['id'], $my); });
答案 1 :(得分:0)
您可以从$all
索引的id
中提取数组,然后通过翻转$my
检查公用密钥:
$result = array_intersect_key(array_column($all, null, 'id'), array_flip($my));
您的结果显示您不使用id
但当前索引,但您的代码显示使用id
。因此,如果您不使用id
,请忘记重新编制索引,然后只需翻转$my
并检查常用密钥:
$result = array_intersect_key($all, array_flip($my));
答案 2 :(得分:0)
你的代码取消了所有不等于1和8的键。这是不可能的,你得到一个空数组。如果你想保留两个循环,你可以使用:
$output = array();
for($m=0; $m< sizeof($all); $m++){
foreach($my as $key => $value){
if($all[$m]['id'] !== $value){
$output[$m] = $all[$m]);
break;
}
}
}
$all = $output;
或者你可以使用unset和in_array:
for($m=0; $m< sizeof($all); $m++){
if(!in_array($all[$m]['id'], $my, true)) {
unset($all[$m]);
break;
}
}