数组在一个数组中有dif键



就像问题说的,我有两个foreach循环,一个循环迭代一个有4个键的数组,另一个迭代一个有3个键的数组,如何在1次迭代中得到这两个数组?

我有这个

....
],
],
'Detalle' => array()
];
foreach ($datos["line_items"] as $line => $item) {  
$tempArray = array(     
'NmbItem' => $item['name'],
'QtyItem' => $item['quantity'],   
'PrcItem' => $item['price'],
'IndExe' => 1
);   
}
foreach($datos["fee_lines"] as $line => $fee){
$tempArray=array(     
'NmbItem' => $fee['name'],
'QtyItem' => 1,
'PrcItem' => $fee['total']
);
}  
$dte['Detalle'][] = $tempArray; 
}

如果你注意到第二个数组循环不包含'index '键,在$dte['Detalle'][] = $tempArray只适用于最后一个循环,或第一个如果我删除第二个。

的输出应该类似于:

temp = Array (
array[0]
'NmbItem => name',
'QtyItem'=> 10,
'PrcItem'= 1000,
'IndExe' => 1
array[1]
'NmbItem => another name',
'QtyItem'=> 5,
'PrcItem'=> 3000
)

为了使它与您的代码一起工作,您还应该在第一个循环之后添加$dte['Detalle'][] = $tempArray;

问题是您在每个foreach中设置$tempArray,因此在$dte['Detalle']中分配它时,您最终只使用最后一个。

所以,像这样的东西应该工作:

foreach ($datos["line_items"] as $line => $item) {  
$tempArray = array(     
'NmbItem' => $item['name'],
'QtyItem' => $item['quantity'],   
'PrcItem' => $item['price'],
'IndExe' => 1
);   
}
$dte['Detalle'][] = $tempArray; 
foreach($datos["fee_lines"] as $line => $fee){
$tempArray=array(     
'NmbItem' => $fee['name'],
'QtyItem' => 1,
'PrcItem' => $fee['total']
);
}  
$dte['Detalle'][] = $tempArray; 

但是,我将使用array_map函数。

Docs forarray_map

你可以这样写:

<?php
$data_1 = array_map(function($item){
return array(     
'NmbItem' => $item['name'],
'QtyItem' => $item['quantity'],   
'PrcItem' => $item['price'],
'IndExe' => 1
);
}, $datos["line_items"]);
$data_2 = array_map(function($fee){
return array(     
'NmbItem' => $fee['name'],
'QtyItem' => 1,
'PrcItem' => $fee['total']
)
}, $datos["fee_lines"]);
$dte['Detalle'] = array_merge($dte['Detalle'], $data_1, $data_2);

最新更新