如何使用一维数组中的关联子数组创建数组?

问题描述 投票:0回答:2

我有以下数组。

Array(
[1041] => 30
[1046] => 10
[1047] => 10
)

我希望将它存储如下。

Array([0] => Array
(
    [material_name] => 1041
    [material_qty] => 30
) 
[1] => Array
(
    [material_name] => 1046
    [material_qty] => 10
)
[2] => Array
(
    [material_name] => 1047
    [material_qty] => 10
) )

现在我正在尝试存储键值,但它只存储最后一个值。

for($i=0; $i<count($materials); $i++){
              foreach($materials as $key => $value){
                 $dataArrMaterial[$i] = array(
                        'material_name' => $key,
              'material_qty' => $value
                         );
              } }
              _print($dataArrMaterial);

我的输出如下。

Array(
[0] => Array
    (
        [material_name] => 1047
        [material_qty] => 10
    )

[1] => Array
    (
        [material_name] => 1047
        [material_qty] => 10
    )

[2] => Array
    (
        [material_name] => 1047
        [material_qty] => 10
    ) )

现在请帮助我做到这一点。提前致谢。

php arrays multidimensional-array associative-array
2个回答
1
投票

你可以简化这个:

<?php
// ...
$dataArrMaterial = [];
foreach ($materials as $materialName => $materialQty) {
    $dataArrMaterial[] = [
        "material_name" => $materialName ,
        "material_qty" => $materialQty
    ];
}

0
投票

既然没有向你解释原因,我会的。

for($i=0; $i<count($materials); $i++){
    foreach($materials as $key => $value){
        // the value of $i is not changed within this loop
        $dataArrMaterial[$i] = array('material_name' => $key, 'material_qty' => $value);
    }
    // when the for() loop starts again, $i is incremented
}

因此,在foreach循环的第一次迭代中,您将所有子数组分配给相同的$i键(0)。在1041循环后,您的输出数组如下所示:

[0 => ["material_name" => 1041, "material_qty" => 30]];

1046之后,第一个推送子阵列被覆盖,因为同一级别的键必须是唯一的。

[0 => ["material_name" => 1046, "material_qty" => 10]];

然后第三个元素覆盖输出数组中的第二个元素:

[0 => ["material_name" => 1047, "material_qty" => 10]];

一旦内循环(foreach)结束,外循环(for)递增$i并且“覆盖”过程重复输出数组的1键。然后再次因为count($materials) = 3(三次迭代)。

这就是为什么你要重复这样的最终值集:

[0 => ["material_name" => 1047, "material_qty" => 10]];
[1 => ["material_name" => 1047, "material_qty" => 10]];
[2 => ["material_name" => 1047, "material_qty" => 10]];

至于执行此任务的最佳方法,您可以使用我的重复链接中的解决方案,或者按照Arkascha的说明进行操作。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.