многомерный массив - PullRequest
       10

многомерный массив

0 голосов
/ 02 февраля 2010

Что означает следующая строка:
$data[0][$row->parentid]['children'][$row->id] = $row->name

Из функции:

function getCategoriesNav(){
    $data = array();

    $this->db->select('id,name,parentid');
    $this->db->where('status', 'active');
    $this->db->orderby('parentid','asc');
    $this->db->orderby('name','asc');
    $this->db->groupby('parentid,id');
    $Q = $this->db->get('categories');
    if ($Q->num_rows() > 0){
        foreach ($Q->result() as $row){
            if ($row->parentid > 0){
                $data[0][$row->parentid]['children'][$row->id] = $row->name;
            }
            else{
                $data[0][$row->id]['name'] = $row->name;
            }
        }
    }
    $Q->free_result(); 
    return $data; 
}

Откуда приходят дети и что означает:
$row->parentid or $row->name?
У меня нет таблицы 'children' в моей таблице, и она нигде не объявлена. Пожалуйста, помогите

Спасибо заранее, Mehdy


Обновление

Извините, если я не объяснил вопрос четко. Мой вопрос был: что означает следующая строка в этой функции $data[0][$row->parentid]['children'][$row->id] = $row->name, откуда эти дети, и что на самом деле означает $row->parentid или $row->name? У меня нет таблицы «дети» в моей таблице, и она нигде не объявлена, пожалуйста, помогите мне.

Спасибо Мехди

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Прочитайте код. Если строка из категории имеет родительский идентификатор, дочерние идентификаторы добавляются в массив под элементом родительского идентификатора children. Это просто берет результирующий набор и преобразует его в иерархическую структуру данных, которая исключает повторения местами и облегчает прохождение.

Обновление:

В частности, что делает следующая строка кода:

$data[0][$row->parentid]['children'][$row->id] = $row->name;

Ваша функция просматривает ваш набор результатов запроса и проверяет, указывает ли текущая строка родительский идентификатор. Если это так, он добавляет хеш к вашему массиву массивов (вашей иерархии).

foreach ($Q->result() as $row) {

Ваш запрос представляет собой набор объектов строк. Кажется, что у каждого объекта есть атрибут для каждого столбца, выбранного в вашем запросе SQL. Так что для ваших SELECT полей:

$this->db->select('id,name,parentid');

У нас есть:

$row->id
$row->name
$row->parentid

Возвращаясь к исходной строке кода:

$data[0][$row->parentid]['children'][$row->id] = $row->name;

Эта строка создает такую ​​структуру:

Array (
    [0] => Array ( // $data[0]
        [400] => Array ( // $data[0][$row->parentid]
            [children] => Array ( // $data[0][$row->parentid]['children']
                [53] => Animal // these are from [$row->id] = $row->name;
                [54] => Mineral
                [55] => Vegetable
            )
        )

        [401] => Array (
            [children] => Array (
                [4] => Wood
                [6] => Metal
                [2] => Plastic
            )
        )
    )
)

Вы могли бы немного упростить эту структуру, удалив первый массив-оболочку $data[0]. Таким образом, вы измените код следующим образом:

$data[$row->parentid]['children'][$row->id] = $row->name;

Это меняет структуру следующим образом:

Array (
    [400] => Array ( // $data[$row->parentid]
        [children] => Array ( // $data[$row->parentid]['children']
            [53] => Animal // these are from [$row->id] = $row->name;
            [54] => Mineral
            [55] => Vegetable
        )
    )

    [401] => Array (
        [children] => Array (
            [4] => Wood
            [6] => Metal
            [2] => Plastic
        )
    )
)

Надеюсь, это прояснит код для вас.

0 голосов
/ 02 февраля 2010

Добавляет значение в массив, а именно $row->name с идентификатором $row->id

Итак, он добавляет дочернюю строку к родителю с идентификатором, который находится в $row->parentid на данный момент. Он перебирает цикл и добавляет дочерний элемент к родительскому элементу, если у родительского элемента есть дочерний элемент

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...