我现在在我的项目上工作了几个小时,我有一些来自早期数组的键,我想循环到我的新数组并从早期数组中选择键的值。
早期阵列:
$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);
答案 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));