这是在两种不同类型的数组之间进行转换的最佳方法吗?

时间:2015-02-19 07:25:06

标签: php arrays

我需要像这样转换数组

array(
    0=>array("key"=>"key1", "val"=>"val1"),
    1=>array("key"=>"key2", "val"=>"val2"),
    2=>array("key"=>"key3", "val"=>"val3"),
)

像这样的数组

array(
  "key1"=>"val1",
  "key2"=>"val2",
  "key3"=>"val3",
)

我喜欢以下内容:

foreach($oldArray as $element){
    $newArray[$element["key"]] = $element["val"];
}

这是转换这些数组的最佳方法吗? (特别是如果阵列很大的话。)

3 个答案:

答案 0 :(得分:3)

消耗最少的内存方式是使用生成器。这样的事情应该有用,但我还没有测试过它。

function flatten(array $inArray) {
  foreach($inArray as $subArray) {
    yield $subArray['key'] => $subArray['val'];
  }
}

$newArray = iterator_to_array(flatten($oldArray));

注意:您需要PHP 5.5+。

答案 1 :(得分:1)

是的,最好的方法是使用foreach,即使你的阵列很大,也不需要很多时间。

你的代码现在有效吗?否则我可以帮到你。

答案 2 :(得分:1)

你可以告诉php自己使用foreach,如下所示。

$array = array(
        0=>array("key"=>"key1", "val"=>"val1"),
        1=>array("key"=>"key2", "val"=>"val2"),
        2=>array("key"=>"key3", "val"=>"val3"),
    );
    $result = array();
    array_walk($array, function($value) use (&$result) {
            $result[$value['key']] = $value['val'];
        }); 

    echo '<pre>';
    print_r($result);
    echo '</pre>';