php 3级转置数组,同时保留中间级(关联键)

a6b3iqyw  于 2023-04-04  发布在  PHP
关注(0)|答案(3)|浏览(102)

我想把这些数组组合成一个新的数组,基于相同的键号来创建表。这是我的代码。

$arr3 = array();

print '<pre>';
print_r($bonus_table);
print '</pre>';

foreach($bonus_table as $key => $row) {
    $arr3 = array_merge($row['cells'],$arr3);
}

return $arr3;

这是我的代码的输出。基本上这是数组的当前结构:

Array
  (
            [0] => Array
                (
                    [cells] => Array
                        (
                            [0] => DEPOTS
                            [1] => PRICES
                        )

                )

            [1] => Array
                (
                    [cells] => Array
                        (
                            [0] => 50
                            [1] => 25
                        )

                )

            [2] => Array
                (
                    [cells] => Array
                        (
                            [0] => 100
                            [1] => 50
                        )

                )
)

但是我想用下面的结构转换上面的输出。所需的数组应该看起来像这样:

Array
        (
            [0] => Array
                (
                    [cells] => Array
                        (
                            [0] => DEPOTS
                            [1] => 50
                            [2] => 100
                        )

                )
            [1] => Array
                (
                    [cells] => Array
                        (
                            [0] => PRICES
                            [1] => 25
                            [2] => 50
                        )
                )
         )
guicsvcw

guicsvcw1#

用下面的代码替换你的foreach循环将产生你想要的数据:

$arr3 = [
    [
        'cells' => ['Depots']
    ],
    [
        'cells' => ['Prices']
    ]
];

foreach ($bonus_table as $input) {
    if (is_numeric($input['cells'][0]) && is_numeric($input['cells'][1])) {
        $output_array[0]['cells'][] = $input['cells'][0];
        $output_array[1]['cells'][] = $input['cells'][1];
    }
}

演示:https://onlinephp.io/c/06b36
在这里,我们循环输入数组($bonus_table),并在输出数组($arr3)中收集数据。

ctrmrzij

ctrmrzij2#

您可以使用array_column

<?php

$bonus_table = [];
$bonus_table[]['cells'] = ["DEPOTS", "PRICES"];
$bonus_table[]['cells'] = [50, 25];
$bonus_table[]['cells'] = [100, 50];

$formattedArray = [];

// The bonus_table first level could be useless
$cellsArray = array_column($bonus_table, 'cells');

foreach($cellsArray as $key => $row) {
    if (array_key_exists($key, $row)) {
        $formattedArray[]["cells"] = array_column($cellsArr, $key);
    }
}

输出

Array
(
    [0] => Array
        (
            [cells] => Array
                (
                    [0] => DEPOTS
                    [1] => 50
                    [2] => 100
                )

        )

    [1] => Array
        (
            [cells] => Array
                (
                    [0] => PRICES
                    [1] => 25
                    [2] => 50
                )

        )

)
tsm1rwdh

tsm1rwdh3#

因为数组中有3层,中间层使用cells作为需要保留的键,所以array transposition可以通过在另一个循环中嵌套一个循环来快速完成,而无需任何函数调用。
根据记录,我认为在数组结构中使用冗余的cells级别没有太大价值。
代码:(Demo

$result = [];
foreach ($array as ['cells' => $data]) {
    foreach ($data as $i => $v) {
        $result[$i]['cells'][] = $v;
    }
}
var_export($result);

相关问题