如何将多个数组元素添加到转置结构中?



我有这些数组

$months = ['jan', 'feb'];
$cashUniform = [2000, 1200];
$cashFee = [24000, 34000];
$cashExpenses = [4000, 300];

我尝试从这些数组创建一个对象,如下所示:

$data = [{
'month': 'jan',
'cashUniform': 2000,
'cashFee': 24000,
'cashExpenses': 4000,
},
{
'month': 'feb',
'cashUniform': 12000,
'cashFee': 34000,
'cashExpenses': 300,
}
];

我已经尝试过array_combine但它只接受两个数组元素,就我而言,我有四个数组元素。

我还尝试创建一个多数组。

$data['months'] = $months;
$data['cashFee'] = $cashFee;
$data['cashUniform'] = $cashUniform;
$data['cashExpenses'] = $cashExpenses;
dd(json_encode($data));

上面的代码返回

{"months":["JAN","FEB"],"cashFee":   [12500,2000],"cashUniform":[2000,0],"cashExpenses":[1500,0]}

您可以使用简单的 for 循环遍历所有数组并将值添加到单个数组中:

$data = [];
for ($i = 0; $i < count($months); $i++) {
$data[] = [
'month' => $monts[$i],
'cashUniform' => $cashUniform[$i],
'cashFee' => $cashFee[$i],
'cashExpenses' => $cashExpenses[$i],
];
}
dd($data);

这确实要求所有数组具有相同数量的值!

$data = [];
foreach ($months as $index => $value) {
$data[] = [
'month' => $monts[$index],
'cashUniform' => $cashUniform[$index],
'cashFee' => $cashFee[$index],
'cashExpenses' => $cashExpenses[$index],
]; 
} 
dd($data);

一些优雅的函数式编程怎么样,这样你就不需要声明全局结果数组了? 使用array_map()转置单独声明的输入数据 - 这会同步迭代每个数组。 然后命名自定义函数的参数,使其与输出子数组中的所需键保持一致。 使用compact()可避免手动重写return行中的键和变量。

代码:(演示(

$months = ['jan', 'feb'];
$cashUniform = [2000, 1200];
$cashFee = [24000, 34000];
$cashExpenses = [4000, 300];
var_export(
array_map(
function ($month, $cashUniform, $cashFee, $cashExpenses) {
return compact(['month', 'cashUniform', 'cashFee', 'cashExpenses']);
},
$months,
$cashUniform,
$cashFee,
$cashExpenses
)
);

输出:

array (
0 => 
array (
'month' => 'jan',
'cashUniform' => 2000,
'cashFee' => 24000,
'cashExpenses' => 4000,
),
1 => 
array (
'month' => 'feb',
'cashUniform' => 1200,
'cashFee' => 34000,
'cashExpenses' => 300,
),
)

最新更新