有效复制特定键的方法

时间:2014-04-12 00:53:28

标签: php arrays copy

我想将特定索引/键的元素从一个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()但是还有其他有效的方法可以完成整个过程。

2 个答案:

答案 0 :(得分:2)

使用array_values()array_intersect_key()获取返回数组的数组值。

$result=array_values(array_intersect_key($a1,array_flip($indices)));

Demo

答案 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最快:

  1. Foreach 2- 0.0000069141387939453125s
  2. John Conde- 0.000010967254638671875s
  3. Foreach 1- 0.0000188350677490234375s
  4. Mine- 0.000031948089599609375
  5. As an image