Как получить доступ к элементам многомерного массива $children Например мне нужно получить в переменную или вывести на экран вот эти данные из массива $children Код (Text): ["name"]=> string(2) "we" Привожу содержимое массива Код (Text): array(2) { [0]=> array(4) { ["id_category"]=> string(1) "6" ["name"]=> string(2) "we" ["link_rewrite"]=> string(2) "we" ["id_shop"]=> string(1) "1" } [1]=> array(4) { ["id_category"]=> string(2) "20" ["name"]=> string(16) "Продукт 2" ["link_rewrite"]=> string(9) "product_2" ["id_shop"]=> string(1) "1" } } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "21" ["name"]=> string(2) "df" ["link_rewrite"]=> string(2) "df" ["id_shop"]=> string(1) "1" } } array(0) { } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(1) "8" ["name"]=> string(10) "Белые" ["link_rewrite"]=> string(10) "white_mugs" ["id_shop"]=> string(1) "1" } } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "10" ["name"]=> string(14) "Красные" ["link_rewrite"]=> string(3) "red" ["id_shop"]=> string(1) "1" } } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "12" ["name"]=> string(16) "Флисовые" ["link_rewrite"]=> string(5) "flees" ["id_shop"]=> string(1) "1" } } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "13" ["name"]=> string(3) "ibm" ["link_rewrite"]=> string(3) "ibm" ["id_shop"]=> string(1) "1" } } array(0) { } array(2) { [0]=> array(4) { ["id_category"]=> string(2) "17" ["name"]=> string(12) "Ручная" ["link_rewrite"]=> string(8) "handmade" ["id_shop"]=> string(1) "1" } [1]=> array(4) { ["id_category"]=> string(2) "19" ["name"]=> string(18) "Фабричная" ["link_rewrite"]=> string(6) "fabric" ["id_shop"]=> string(1) "1" } } array(0) { } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "18" ["name"]=> string(12) "третий" ["link_rewrite"]=> string(3) "3rd" ["id_shop"]=> string(1) "1" } } array(1) { [0]=> array(4) { ["id_category"]=> string(2) "22" ["name"]=> string(18) "четвертый" ["link_rewrite"]=> string(4) "four" ["id_shop"]=> string(1) "1" } } array(0) { } Пожалуйста покажите как это делается?
Странный набор массивов.... Вот маленький код Код (PHP): <?php $array[0]["id_category"] = "6"; $array[0]["name"] = "we"; $array[0]["link_rewrite"] = "we"; $array[0]["id_shop"] = "1"; $array[1]["id_category"] = "20"; $array[1]["name"] = "Продукт 2"; $array[1]["link_rewrite"] = "product_2"; $array[1]["id_shop"] = "1"; foreach ($array as $key => $value) { if (isset($value['name'])) { echo 'Ключ: ' . $key . '. Значение [name]: ' . $value['name'] . '</br>'; } }
Приведен вот такой пример Код (Text): $children[0]['name'] Как в таком случае должена выглядеть конструкция, если мне нужно получить доступ к последнему массиву (см. предпоследнюю строчку в приведенном в начале поста листинга массива) Код (Text): ["name"]=> string(18) "четвертый"
в твоём случае это Код (Text): array(2) { [0]=> array(4) { ["id_category"]=> string(1) "6" ["name"]=> string(2) "we" ["link_rewrite"]=> string(2) "we" ["id_shop"]=> string(1) "1" } [1]=> array(4) { ["id_category"]=> string(2) "20" ["name"]=> string(16) "Продукт 2" ["link_rewrite"]=> string(9) "product_2" ["id_shop"]=> string(1) "1" } }
Для доступа к последнему массиву который содержит Код (Text): ["name"]=> string(18) "четвертый" в массиве $children Вот так должна выглядеть строчка?
Не работает $children[1]['name'] я получаю ["name"]=> string(2) "df", а нужно получить ["name"]=> string(18) "четвертый" Посмотрите пожалуйста полный листинг массива, он приведен в начале поста
этот листинг получен командой Код (Text): var_dump($children) Вот здесь описание этой команды http://php.su/functions/?var_dump т.е. я полагаю что $children это многомерный массив.. возможно ошибочно.
значит ты этой функцией пользуешься в цикле где-то "листинг массива" должен быть такием Array(Array(Array())); а сейчас у тебя Array(Array());Array(Array());Array();Array(Array()).... и т.д
нет. этот "листинг" получен в цикле. а значит тебе надо будет объяснить, как тебе отловить нужный тебе массив в этом цикле... а ты даже не понимаешь, что у тебя там творится, значит код не твой, значит вслепую через форум можно позеленеть объяснять. давай код этого места с запасом.
Да, действительно.. выводится в цикле.. что еще больше усложняет мне жизнь Код (PHP): private function getCategory($id_category, $id_lang = false, $id_shop = false) { $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id; $category = new Category((int)$id_category, (int)$id_lang); if ($category->level_depth > 1) $category_link = $category->getLink(); else $category_link = $this->context->link->getPageLink('index'); if (is_null($category->id)) return; $children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop); var_dump($children); $selected = ($this->page_name == 'category' && ((int)Tools::getValue('id_category') == $id_category)) ? ' class="sfHoverForce"' : ''; $is_intersected = array_intersect($category->getGroups(), $this->user_groups); // filter the categories that the user is allowed to see and browse if (!empty($is_intersected)) { $this->_menu .= '<li class="alt1"'.$selected.'>'; $this->_menu .= '[url="'.$category_link.'"]name.'[/url]'; /* if (count($children))*/ /*var_dump($children);*/ if (count($children)) /* if(count($children) & ($ddd=3))*/ { $this->_menu .='<div class="st"></div><ul class="level2">'; foreach ($children as $child) $this->getCategory((int)$child['id_category'], (int)$id_lang, (int)$child['id_shop']); $this->_menu .='</ul>'; } $this->_menu .= '</li>'; } } http://www.phpkode.com/source/p/pre...stashop/modules/blocktopmenu/blocktopmenu.php - здесь файл из которого выдернута эта функция http://www.phpkode.com/source/p/prestashop-e-commerce-solution/classes/Category.php - классы которые могут использоватся в blocktopmenu.php blocktopmenu.php - как раз и формирует верхнее меню Моя сверхзадача состоит в ограничении вложенности верхнего меню, уровнем два. на сайте chemirus.tmweb.ru
Это правильный вопрос.. но ответа я на него не знаю.. не хватает знаний что бы разобрать файл. Практически вложенность категорий задается через интерфейс CMS и хранится вероятнее всего в базе. Читается она из базы какой то функцией из Category.php которая вызывается из blocktopmenu.php (как мне кажется) переменная level_depth или что то вроде max level depth Код (Text): if(count($children) & ($ddd=2)) при использовании вот такой строчки в приведенной выше функции корректно работают меню имеющие вложенность два и больше. но не работают имеющие вложенность 1 Код (Text): if(count($children) & ($ddd=1)) при использовании вот такой строчки корректно работают меню имеющие вложенность 1 . но не работают имеющие вложенность 2 и больше Может есть какая то возможность глядя на функцию как то логически объединить Код (Text): if(count($children) & ($ddd=2)) и Код (Text): if(count($children) & ($ddd=1))
не очень понятно, как ты хочешь отобразить те пункты, которые были вложены. если просто навалить их списком, то наверное это не сложно.
как это сделать? приведи пример пожалуйста Как логически объединить Код (Text): if(count($children) & ($ddd=1)) Код (Text): if(count($children) & ($ddd=2)) может и списком... вот сейчас в цикле var_dump на сайте chemirus.tmweb.ru выведен массив с условием Код (Text): if(count($children) & ($ddd=3)) Мне нужно вывести с условием $ddd=1 и $ddd=2
не, я имел в виду, как это будет выглядеть в итоге? не очень понятно как их всех отобразить в одном списке если они были вложены. может просто в цмс исправить содержимое меню?
Меню в CMS формируется динамически и как раз файл blocktopmenu.php отвечает за вывод и формирование менюшки. Все таки можешь подсказать, как сделать это.. посмотри мое предыдущее сообщение
DDDD ужас нах. Код (PHP): if(count($children) & ($ddd=3)) $bbb=3 вы присваиваете 3, а надо?) Что конкретно нужно сделать, что - то не врубаюсь.
Верхнее меню имеет глубину вложенности до 3 уровня. Мне нужно ограничить глубину вложенности до 2 уровня. Как то вот так.
За поговорить все горазды.. вот только опыта похоже решать реальные зазадчи не хватает, жаль. А еще форум назыается