结果数组不符合Code

时间:2018-02-21 19:58:54

标签: php arrays

我有两个数组如下:

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

3 个答案:

答案 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;
        }
}