在 PHP 中重建数组:合并数组元素并将它们保存为逗号分隔值

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

我在重新构建 PHP 数组时遇到一些麻烦。我需要更改它以使用 tfPDF 库将表格打印到 PDF 文档。

我尝试了 foreach 循环、array_walk、array_walk_recursive、array_chunk 和 array_slice - 到目前为止没有成功。

这是我的数组$data:

Array
(
    [file_id] => 1394
    [user_id] => 463466
    [periode] => 2022
    [costs] => 64.45
    [values] => Array
        (
            [457] => Array
                (
                    [1] => Array
                        (
                            [data_id] => 1
                            [supplier_id] => 457
                            [costs1] => 1000
                            [costs2] => 100
                            [group_name] => 7%
                        )

                    [140] => Array
                        (
                            [data_id] => 140
                            [supplier_id] => 457
                            [costs1] => 2000
                            [costs2] => 50
                            [group_name] => 19%
                        )

                    [197] => Array
                        (
                            [data_id] => 197
                            [supplier_id] => 457
                            [costs1] => 3000
                            [costs2] => 300
                            [group_name] => special
                        )

                )

            [430] => Array
                (
                    [490] => Array
                        (
                            [data_id] => 490
                            [supplier_id] => 430
                            [costs1] => 500
                            [costs2] => 30
                            [group_name] => new 4
                        )

                    [552] => Array
                        (
                            [data_id] => 552
                            [supplier_id] => 430
                            [costs1] => 7000
                            [costs2] => 250
                            [group_name] => new 5
                        )

                )

            [425] => Array
                (
                    [1106] => Array
                        (
                            [data_id] => 1106
                            [supplier_id] => 425
                            [costs1] => 10
                            [costs2] => 4
                            [group_name] => new 6
                        )

                )

        )

)

对于打印功能,以下格式是最好的:

$pdf->Row(array(
                        "data_id \n" .
                        "data_id \n" .
                        "data_id",
                        
                        "supplier_id \n" .
                        "supplier_id \n" .
                        "supplier_id",
                        
                        "costs1 \n" .
                        "costs1 \n" .
                        "costs1",
                        
                        "costs2 \n" .
                        "costs2 \n" .
                        "costs2",
                        
                        "group_name \n" .
                        "group_name \n" .
                        "group_name",
));

所以我需要将 $data 更改为这样的数组:

Array
(
    [file_id] => 1394
    [user_id] => 463466
    [periode] => 2022
    [costs] => 64.45
    [values] => Array
        (
            [457] => Array
                (
                    [data_id] => 1, 140, 197
                    [supplier_id] => 457, 457, 457
                    [costs1] => 1000, 2000, 3000
                    [costs2] => 100, 50, 300
                    [group_name] => 7%, 19%, special
                )

            [430] => Array
                (
                    [data_id] => 490, 552
                    [supplier_id] => 430, 430
                    [costs1] => 500, 7000
                    [costs2] => 30, 250
                    [group_name] => new 4, new 5
                )

            [425] => Array
                (
                    [data_id] => 1106
                    [supplier_id] => 425
                    [costs1] => 10
                    [costs2] => 4
                    [group_name] => new 6
                )
        )

)

你能帮我吗?

最后一步是像这样的逗号分隔:

array_walk($data['values'], function (&$val) {
    $val[] = implode(", ", $val[]);
});
php arrays multidimensional-array
1个回答
0
投票

一些循环和测试,它应该可以工作:

<?php
$arr = array(
    "file_id" => 1394,
    "user_id" => 463466,
    "periode" => 2022,
    "costs" => 64.45,
    "values" => array(
        "457" => array(
            "1" => array(
                "data_id" => 1,
                "supplier_id" => 457,
                "costs1" => 1000,
                "costs2" => 100,
                "group_name" => "7%",
            ),

            "140" => array(
                "data_id" => 140,
                "supplier_id" => 457,
                "costs1" => 2000,
                "costs2" => 50,
                "group_name" => "19%",
            ),

            "197" => array(
                "data_id" => 197,
                "supplier_id" => 457,
                "costs1" => 3000,
                "costs2" => 300,
                "group_name" => "special",
            ),

        ),

        "430" => array(
            "490" => array(
                "data_id" => 490,
                "supplier_id" => 430,
                "costs1" => 500,
                "costs2" => 30,
                "group_name" => "new 4",
            ),

            "552" => array(
                "data_id" => 552,
                "supplier_id" => 430,
                "costs1" => 7000,
                "costs2" => 250,
                "group_name" => "new 5",
            ),

        ),

        "425" => array(
            "1106" => array(
                "data_id" => 1106,
                "supplier_id" => 425,
                "costs1" => 10,
                "costs2" => 4,
                "group_name" => "new 6",
            ),

        ),

    ),

);

$values = $arr['values'];
$result = [];
foreach ($values as $key1 => $value1) {
    $result[$key1] = [];
    foreach ($value1 as $key2 => $value2) {
        foreach ($value2 as $key3 => $value3) {
            $result[$key1][$key3][] = $value3;
        }
    }
    foreach ($result[$key1] as $key2 => $value2) {
        $result[$key1][$key2] = implode(', ', $value2);
    }
}
$arr['values'] = $result;
print_r($arr);

输出:

Array
(
    [file_id] => 1394
    [user_id] => 463466
    [periode] => 2022
    [costs] => 64.45
    [values] => Array
        (
            [457] => Array
                (
                    [data_id] => 1, 140, 197
                    [supplier_id] => 457, 457, 457
                    [costs1] => 1000, 2000, 3000
                    [costs2] => 100, 50, 300
                    [group_name] => 7%, 19%, special
                )

            [430] => Array
                (
                    [data_id] => 490, 552
                    [supplier_id] => 430, 430
                    [costs1] => 500, 7000
                    [costs2] => 30, 250
                    [group_name] => new 4, new 5
                )

            [425] => Array
                (
                    [data_id] => 1106
                    [supplier_id] => 425
                    [costs1] => 10
                    [costs2] => 4
                    [group_name] => new 6
                )

        )

)
© www.soinside.com 2019 - 2024. All rights reserved.