如何在PHP中创建基于2个计数数组的2个集合?



我知道这是一个基本的问题,我很抱歉我不能回答,但我怎么能在Laravel/PHP中创建基于2个值的数组的2个集合?下面是我的代码:

$received_items = ReceiveItems::where('voucher_id', '=', $request->voucher_id)->get();
foreach($received_items as $received_item) {
$product_ids = $received_item->product_id;
foreach($product_ids as $product_item_no => $product_id) {
$products = Product::where('id', '=', $product_id); 
$voucher_cost = $products->value('cost');
$qty_addend = $received_item->qty_per_item;
$list = array(
'product_item_no' => $product_item_no + 1,
'product_name' => $products->value('name'),
'size' => $products->value('size'),
'qty_addend' => $qty_addend[$product_item_no],
'voucher_cost' => $voucher_cost,
'ext_cost' => number_format($voucher_cost * $qty_addend[$product_item_no], 2)
);
$list = (object)$list;
$received_item->list = $list;
$data = collect([$list]);
}
}
return $data;

基本上,$product_ids是我想要获得的数组,count($product_ids)返回2,但它只是从第二个数组值创建集合。请看下面的截图:

screenshot.png

任何帮助都非常感谢。

在您的$list变量中,它将只存储最后的product_id数据,因为您必须将$list作为多维数组。您必须将$list变量从第二个循环中取出,这样它就不会覆盖数据。

试试下面的代码:

$received_items = ReceiveItems::where('voucher_id', '=', $request->voucher_id)->get();
foreach($received_items as $received_item) {
$product_ids = $received_item->product_id;
$list = []; // declare list variable here
foreach($product_ids as $product_item_no => $product_id) {
$products = Product::where('id', '=', $product_id);
$voucher_cost = $products->value('cost');
$qty_addend = $received_item->qty_per_item;
$list[] = array( // make it multi-dimentional array
'product_item_no' => $product_item_no + 1,
'product_name' => $products->value('name'),
'size' => $products->value('size'),
'qty_addend' => $qty_addend[$product_item_no],
'voucher_cost' => $voucher_cost,
'ext_cost' => number_format($voucher_cost * $qty_addend[$product_item_no], 2)
);
}
// take this code out of loop
$list = (object)$list;
$received_item->list = $list;
$data = collect([$list]);
}
return $data;

最新更新