簡體   English   中英

將嵌套數組轉換為laravel中的特定選擇框

[英]convert a nested array to a specific select box in laravel

我有一個這樣的嵌套數組:

$categories = [
  ['id' => 1, 'name' => 'TV & Home Theather'],
  ['id' => 2, 'name' => 'Tablets & E-Readers'],
  ['id' => 3, 'name' => 'Computers', 'children' => [
    ['id' => 4, 'name' => 'Laptops', 'children' => [
      ['id' => 5, 'name' => 'PC Laptops'],
      ['id' => 6, 'name' => 'Macbooks (Air/Pro)']
    ]],
    ['id' => 7, 'name' => 'Desktops'],
    ['id' => 8, 'name' => 'Monitors']
  ]],
  ['id' => 9, 'name' => 'Cell Phones']
];

我正在尋找一種在larvel或PHP中將其轉換為嵌套組合框的方法,如下所示:

 <option value="1">TV & Home Theather</option>
 <option value="2">Tablets & E-Readers</option>
 <option value="3">Computers</option>
 <option value="4">Computers >> Laptops </option>
 <option value="5">Computers >> Laptops >> PC Laptops</option>
 <option value="6">Computers >> Laptops >> Macbooks (Air/Pro) </option>
 <option value="7">Computers >> Desktops </option>
 <option value="8">Computers >> Monitors </option>
 <option value="9">Cell Phones</option>

意味着我想要它看起來像這樣:

在此輸入圖像描述

這是一種使用帶有遞歸函數的純PHP實現它的方法......

首先,我們定義類別數組:

$categories = [
  ['id' => 1, 'name' => 'TV & Home Theather'],
  ['id' => 2, 'name' => 'Tablets & E-Readers'],
  ['id' => 3, 'name' => 'Computers', 'children' => [
    ['id' => 4, 'name' => 'Laptops', 'children' => [
      ['id' => 5, 'name' => 'PC Laptops'],
      ['id' => 6, 'name' => 'Macbooks (Air/Pro)']
    ]],
    ['id' => 7, 'name' => 'Desktops'],
    ['id' => 8, 'name' => 'Monitors']
  ]],
  ['id' => 9, 'name' => 'Cell Phones']
];

接下來,我們定義一個遞歸函數,它將為父類傳遞類別標題:

function printCats($categories, $parent = NULL) {
    while ($category = array_shift($categories)) {
        $catName = ($parent ? $parent.' &gt;&gt; ' : '').$category['name'];
        print("<option value='{$category['id']}'>{$catName}</option>\n");
        if (isset($category['children']))
            printCats($category['children'], $catName);
    }
}

最后,調用,傳遞類別樹:

printCats($categories);

輸出:

<option value='1'>TV & Home Theather</option>
<option value='2'>Tablets & E-Readers</option>
<option value='3'>Computers</option>
<option value='4'>Computers &gt;&gt; Laptops</option>
<option value='5'>Computers &gt;&gt; Laptops &gt;&gt; PC Laptops</option>
<option value='6'>Computers &gt;&gt; Laptops &gt;&gt; Macbooks (Air/Pro)</option>
<option value='7'>Computers &gt;&gt; Desktops</option>
<option value='8'>Computers &gt;&gt; Monitors</option>
<option value='9'>Cell Phones</option>

如果你不想自己實現這個,我過去曾經使用過這個軟件包。

https://github.com/atayahmet/laravel-nestable

這將采用嵌套數組/集合並將其轉換為HTML列表。 對於文檔,這是輸出的示例:

<select name="categories">
    <option value="1">T-shirts</option>
    <option value="2" selected="selected">  Red T-shirts</option>
    <option value="3">  Black T-shirts</option>

    <option value="4">Sweaters</option>
    <option value="5">  Red Sweaters</option>
    <option value="6">  Blue Sweaters</option>
</select>

它對宏的支持也是一個很好的功能,允許您輕松集成路由。

暫無
暫無

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

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