如何使用另一个数组按键过滤数组

时间:2017-03-17 01:14:22

标签: php arrays

我现在在我的项目上工作了几个小时,我有一些来自早期数组的键,我想循环到我的新数组并从早期数组中选择键的值。

早期阵列:

$old_keys = ['key1','key2','key3'];

新数组:

$result = ['key1' => 'foo', 'key2' => 'bar', 'key6' => 'ipsum'];

我想要的输出是:

$output = ['foo', 'bar'];

这就是我所做的:

foreach ($old_keys as $old_key) {

    $output[] = array_column($result, $old_key);

}
return $output;

我错了什么因为我得到的所有东西都是一个空数组

非常感谢!

更新

$keys = array_flip($old_keys);

$output = array_values(array_intersect_key($result, $keys));

echo '<pre>';
var_dump($output);

$ output现在填充了$ result的多维数组,但值'foo'和'bar'位于这个多维数组的第二级。问题是,我只得到这个数组的第一级而不是第二级。

输出示例:

[
 [0] => string
 [1] => string
 [
  [key1] => foo
  [key2] => bar
 ]
]

我想要的是:

[
 [0] => string
 [1] => string
 [3] => foo
 [4] => bar
]

解决方案:

$flat = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($result)), true);

1 个答案:

答案 0 :(得分:1)

使用$result过滤$old_keys数组,但使用$old_keys值作为键:

$old_keys = array_flip(['key1','key2','key3']);
$result = ['key1' => 'foo', 'key2' => 'bar', 'key6' => 'ipsum'];
$output=array_intersect_key($result,$old_keys);
print_r($output);

如果要重新索引结果中的键,请将$output声明替换为:

$output=array_values(array_intersect_key($result,$old_keys));