如何在数组中添加其他值

时间:2014-09-21 07:59:55

标签: php laravel laravel-4

我正在尝试在Laravel中创建嵌套类别。我创建了以下模型:Category.php,ItemsHelper.php(这个用于显示嵌套类别)。

ItemsHelper.php:

  class ItemsHelper {

    private $items;

    public function __construct($items) {
        $this->items = $items;
    }

    public function htmlList() {
        return $this->htmlFromArray($this->itemArray());
    }

    private function itemArray() {
        $result = [];
        foreach($this->items as $item) {
            if ($item->parent_id == 0) {
                $result[$item->title] = $this->itemWithChildren($item);
            }
        }
        return $result;
    }

    private function childrenOf($item) {
        $result = [];
        foreach($this->items as $i) {
            if ($i->parent_id == $item->id) {
              $result[] = $i;
            }
        }
        return $result;
    }

    private function itemWithChildren($item) {
        $result = [];
        $children = $this->childrenOf($item);
        foreach ($children as $child) {
            $result[$child->title] = $this->itemWithChildren($child);
        }
        return $result;
    }

    private function htmlFromArray($array) {
        $html = '';
        foreach($array as $k => $v) {
            $html .= "<ul>";
            $html .= "<li>" . $k . "</li>";
            if(count($v) > 0) {
                $html .= $this->htmlFromArray($v);
            }
            $html .= "</ul>";
        }
        return $html;
    }
}

然后我在index.blade.php中打印嵌套的数据列表:

{{ $itemsHelper->htmlList() }}

然而,这仅打印普通标题,我需要将它们转换为指向我的类别的链接,例如htmlFromArray()方法:

$html .= "<li><a href="/category/$k->id">" . $k . "</a></li>";

方法itemArray()

$result[$item->title] = $this->itemWithChildren($item);

如何添加每个项目的数组ID?

1 个答案:

答案 0 :(得分:1)

您应该以这种方式更改方法itemArrayitemWithChildrenhtmlFromArray

private function itemArray()
{
    $result = [];
    foreach ($this->items as $item) {
        if ($item->parent_id == 0) {
            $record['title'] = $item->title;
            $record['id'] = $item->id;
            $record['children'] = $this->itemWithChildren($item);
            $result[] = $record;
        }
    }
    return $result;
}

private function itemWithChildren($item)
{
    $result = [];
    $children = $this->childrenOf($item);
    foreach ($children as $child) {
        $record['title'] = $child->title;
        $record['id'] = $child->id;
        $record['children'] = $this->itemWithChildren($child);
        $result[] = $record;
    }
    return $result;
}

private function htmlFromArray($array)
{
    $html = '';
    foreach ($array as $item) {
        $html .= "<ul>";
        $html
            .=
            '<li><a href="/category/' . $item['id'] . '">' . $item['title']
            . "</a></li>";
        if (count($item['children']) > 0) {
            $html .= $this->htmlFromArray($item['children']);
        }
        $html .= "</ul>";
    }
    return $html;
}

现在,您可以存储在数组idtitle和元素子列表中,以便您可以访问iun htmlFromArray所有这些元素属性。