簡體   English   中英

Laravel 中按名稱分組的數組

[英]Array group by name in Laravel

我有一個 XML 格式的訂單列表,我需要按名稱列出產品和數量組以顯示如下列表:

     <ul>
     <li>Product name A - 3</li>
     <li>Product name B - 6</li>
     <li>Product name C- 3/<li>
     </ul>

我閱讀了 XML 並使用 foreach 創建了一個數組,如下所示:

 foreach($order->associations->order_rows as $product){

        $list[]=[
            'name' => $producto->product_name,
            'quantity' =>$producto->product_quantity
        ];

  }

而數組是

Array
(
    [0] => Array
        (
            [name] => Kong - Size : M (39-42)
            [quantity] => 1
        )

    [1] => Array
        (
            [name] => Kong - Size : M (39-42)
            [quantity] => 1
        )

    [2] => Array
        (
            [name] => Invaders - Size : M (39-42)
            [quantity] => 1
        )

    [3] => Array
        (
            [name] => Super Mamá - Size : S (35-38)
            [quantity] => 1
        )

    [4] => Array
        (
            [name] => Vanlife - Size : M (39-42)
            [quantity] => 1
        )

我需要在前面顯示每個產品的數量(按名稱排列的數組)。

我正在嘗試使用集合

$namelist = collect($list)->groupBy('name');

但我不確定最好的方法是什么,我被卡住了

一種選擇是遍歷所有項目並對同名的數量求和。

如果不需要中間的$list ,也可以直接在 foreach 循環中對數量求和。

例如

$results = [];

foreach ($list as $item) {
    array_key_exists($item["name"], $results) ?
        $results[$item["name"]]["quantity"] += $item["quantity"] :
        $results[$item["name"]] = $item;
}

echo "<ul>" . PHP_EOL;;
foreach ($results as $result) {
    echo sprintf("<li>%s - %s</li>", $result["name"] , $result["quantity"]) . PHP_EOL;
}
echo "</ul>";

輸出

<ul>
<li>Kong - Size : M (39-42) - 2</li>
<li>Invaders - Size : M (39-42) - 1</li>
<li>Super Mamá - Size : S (35-38) - 1</li>
<li>Vanlife - Size : M (39-42) - 1</li>
</ul>

php 演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM