如何将多维数组键更改为Childs键值?

时间:2017-06-27 11:59:02

标签: php arrays multidimensional-array

我正在尝试将多维数组中的父键重命名为子键的值。

例如,在下面的代码中,我想将键[0]更改为[111],将键[1]更改为[222],这样我以后就可以轻松识别数组合并的键。

Array (
[0] => Array ( [product_id] => 111 [product_name] => Foo [quantity] => 4 )
[1] => Array ( [product_id] => 222 [product_name] => Bar [quantity] => 2 )
)

我已经尝试了各种方法来做这个但是在进入循环后,我无法弄清楚如何影响父键并假设在将其传递给变量之后是不可能的。是否有一个简单的解决方案来更改我缺少的密钥,或者是进入循环并使用所需密钥重建新阵列的情况?

3 个答案:

答案 0 :(得分:3)

您需要创建一个新数组,例如:

$original = array(
[0] => Array ( [product_id] => 111 [product_name] => Foo [quantity] => 4 )
[1] => Array ( [product_id] => 222 [product_name] => Bar [quantity] => 2 )
)

$new = array();
foreach ($original as $val) {
    $new[$val->product_id] = $val;
}

答案 1 :(得分:3)

使用array_combinearray_column函数的

单行解决方案:

$result = array_combine(array_column($arr, 'product_id'), $arr);
print_r($result);

输出:

Array
(
    [111] => Array
        (
            [product_id] => 111
            [product_name] => Foo
            [quantity] => 4
        )

    [222] => Array
        (
            [product_id] => 222
            [product_name] => Bar
            [quantity] => 2
        )
)

答案 2 :(得分:0)

创建新数组使用foreach循环遍历旧数组并指定新数组的值

 <?php
    $oldArray[0] = Array ("product_id"=> 111 , "product_name" => "Foo" , "quantity" => 4 );
    $oldArray[1] = Array ("product_id"=> 222 , "product_name" => "Bar" , "quantity" => 2 );
    $newArray=array();
    foreach($oldArray as $childarray){
    $newArray[$childarray['product_id']]=array('product_id'=>$childarray["product_id"],'product_name'=>$childarray["product_name"],'quantity'=>$childarray["quantity"]);
    }
    echo "<pre>";
    print_r($newArray);
    echo "</pre>";
    ?>