我有这些数组
$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,
),
)