我想将特定索引/键的元素从一个php数组复制到另一个php数组。我遇到了this帖子并尝试了以下内容:
$a1=array(10,15,20,25,30);
$indices=array(2,4);
$result=array_intersect_key($a1,array_flip($indices));
print_r($result);
但我的结果是这样的
Array ( [2] => 20 [4] => 30 )
我希望新数组中的键从[0]
开始。即,我希望结果是
Array ( [0] => 20 [1] => 30 )
我查看了array_combine()
但是还有其他有效的方法可以完成整个过程。
答案 0 :(得分:2)
使用array_values()
从array_intersect_key()
获取返回数组的数组值。
$result=array_values(array_intersect_key($a1,array_flip($indices)));
答案 1 :(得分:2)
如果你有PHP5.3或更高版本,你也可以使用带有闭包的array_walk_recursive()
:
$array = [10,15,20,25,30];
$indices = [2, 4];
array_walk_recursive($array, function($value, $index) use(&$array, $indices)
{
if(!in_array($index, $indices))
unset($array[$index]);
});
return array_values($array);
修改强>:
但这比之前的解决方案更有效吗?
不是,不。测试我们的原始解决方案,以及这两个foreach解决方案:
Foreach 1
function($array, $indices)
{
foreach($array as $key => $value)
if(!in_array($key, $indices))
unset($array[$key]);
return array_values($array);
}
Foreach 2
function($array, $indices)
{
$newArray = [];
foreach($indices as $index)
$newArray[] = $array[$index];
return $newArray;
}
我发现第二个foreach最快: