我在重新构建 PHP 数组时遇到一些麻烦。我需要更改它以使用 tfPDF 库将表格打印到 PDF 文档。
我用
foreach()
循环、array_walk()
、array_walk_recursive()
、array_chunk()
和 array_slice()
尝试过 - 到目前为止没有成功。
这是我的数组$data:
$data = [
"file_id" => 1394,
"user_id" => 463466,
"periode" => 2022,
"costs" => 64.45,
"values" => [
"457" => [
"1" => [
"data_id" => 1,
"supplier_id" => 457,
"costs1" => 1000,
"costs2" => 100,
"group_name" => "7%",
],
"140" => [
"data_id" => 140,
"supplier_id" => 457,
"costs1" => 2000,
"costs2" => 50,
"group_name" => "19%",
],
"197" => [
"data_id" => 197,
"supplier_id" => 457,
"costs1" => 3000,
"costs2" => 300,
"group_name" => "special",
],
],
"430" => [
"490" => [
"data_id" => 490,
"supplier_id" => 430,
"costs1" => 500,
"costs2" => 30,
"group_name" => "new 4",
],
"552" => [
"data_id" => 552,
"supplier_id" => 430,
"costs1" => 7000,
"costs2" => 250,
"group_name" => "new 5",
],
],
"425" => [
"1106" => [
"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 更改为这样的数组:
[
'file_id' => 1394,
'user_id' => 463466,
'periode' => 2022,
'costs' => 64.45,
'values' => [
457 => [
'data_id' => '1, 140, 197',
'supplier_id' => '457, 457, 457',
'costs1' => '1000, 2000, 3000',
'costs2' => '100, 50, 300',
'group_name' => '7%, 19%, special',
],
430 => [
'data_id' => '490, 552',
'supplier_id' => '430, 430',
'costs1' => '500, 7000',
'costs2' => '30, 250',
'group_name' => 'new 4, new 5',
],
425 => [
'data_id' => 1106,
'supplier_id' => 425,
'costs1' => 10,
'costs2' => 4,
'group_name' => 'new 6',
],
],
];
你能帮我吗?
最后一步是像这样的逗号分隔:
array_walk($data['values'], function (&$val) {
$val[] = implode(", ", $val[]);
});
一些循环和测试,它应该可以工作:
<?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
)
)
)
我会修改原始数组,使用嵌套循环来巩固结构,然后就地更新每个数据子集。
foreach()
演示)(array_walk()
演示)(array_map()
演示)
foreach ($data['values'] as &$values) {
$set = [];
foreach ($values as $row) {
if (!$set) {
$set = $row;
} else {
foreach ($row as $k => $v) {
$set[$k] .= ", $v";
}
}
$values = $set;
}
}
var_export($data);