态
我有两个数组:
$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;
}
}
}
$res = array_filter($all,
function ($x) use($my) {
return in_array($x['id'], $my); });
您的代码UNSETS所有不等于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;
}
}
您可以从 $all
索引的CC_1提取阵列,然后通过翻转$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));