结果数组不符合代码



我有两个数组:

$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));

最新更新