Как вывести массив от последнего значения к первому

Konpolya

Постоялец
Регистрация
23 Окт 2015
Сообщения
91
Реакции
11
Здравствуйте! Пишу хлебные крошки для товаров.
Во вьюшке пишу $this->product->getBread($this->category_id), которая передает в функцию id категорию товара
Функция выглядит так:

Код:
public function getBread($parent)
{
    $items = SELECT * FROM link_category WHERE 'child_id = '$parent;
    $html = '';
    if (!empty($items)) {
        for ($i = 0; $i < count($items) ; $i++) {
            $html = $items[$i]['name'];
            $subItems = $this->getBread($parent = $items[$i]['parent_id'];
            if (!empty($subItems)) {
                $html .= $subItems;
            }
        }
    }
    return $html;
}

Выводятся id категории так: 845->650->320->2
А мне нужно 2->320->650->845
Как это можно организовать? Пробовал переписать for ($i = count($items)-1; $i >= 0 ; $i--) , все равно выводится не так

Хотелось бы обойтись без javascript

Попробовал обернуть каждый цикл в span + float:right и обрамил всю функцию в div, который имеет float:left, все работает, но разве это выход?
 
Последнее редактирование:
PHP:
$subItems = $this->getBread($parent = $items[$i]['parent_id'];
что там лежит?
 
Покажите пример значения $subItems. Также $items и $html - примеры нужны, что там может лежать.
 
Здравствуйте! Пишу хлебные крошки для товаров.
Во вьюшке пишу $this->product->getBread($this->category_id), которая передает в функцию id категорию товара
Функция выглядит так:

Код:
public function getBread($parent)
{
    $items = SELECT * FROM link_category WHERE 'child_id = '$parent;
    $html = '';
    if (!empty($items)) {
        for ($i = 0; $i < count($items) ; $i++) {
            $html = $items[$i]['name'];
            $subItems = $this->getBread($parent = $items[$i]['parent_id'];
            if (!empty($subItems)) {
                $html .= $subItems;
            }
        }
    }
    return $html;
}

Выводятся id категории так: 845->650->320->2
А мне нужно 2->320->650->845
Как это можно организовать? Пробовал переписать for ($i = count($items)-1; $i >= 0 ; $i--) , все равно выводится не так

Хотелось бы обойтись без javascript

Попробовал обернуть каждый цикл в span + float:right и обрамил всю функцию в div, который имеет float:left, все работает, но разве это выход?
А если попробовать так:
PHP:
public function getBread($parent)
{
    $items = SELECT * FROM link_category WHERE 'child_id = '$parent;
    $html = '';
    $html_arr = array();
    if (!empty($items)) {
        for ($i = 0; $i < count($items) ; $i++) {
            $html_arr[$i] = $items[$i]['name'];
            $subItems = $this->getBread($parent = $items[$i]['parent_id'];
            if (!empty($subItems) and isset($html_arr[$i])) {
                $html_arr[$i]= $html_arr[$i] . '->' . $subItems;
            }
        }
        if (!empty($html_arr)) {
                array_reverse($html_arr)
                $html = implode('', $html_arr);
        }
    }
    return $html;
}

Метод конечно извращенный, но думаю будет работать.
 
А недостаточно будет строку
PHP:
$html .= $subItems;
заменить на
PHP:
$html = $subItems . $html;
?
 
Назад
Сверху