День добрый. Застрял на одной задаче. У меня есть скрипт который строит дерево каталога сайта. PHP: <?php foreach($arResult["SECTIONS"] as $arSection): $section=1; for($i=0;$i<count($parent);$i++) if(($arSection["ID"]==$parent[$i])||($arhiv[$arSection["ID"]]==1)) $section=0; if($section==0 and $Manuals_ON==1 and ($arhiv[$arSection["ID"]]==1)) $section=1; if(($section==1)&&(($arSection["DEPTH_LEVEL"]==1)||($section_id==$arSection["ID"])||($arParent[$section_id]==$arSection["ID"])||($section_id==$arParent[$arSection["ID"]])||($arParent[$section_id]==$arParent[$arSection["ID"]])||($arParent[$arParent[$section_id]]==$arParent[$arSection["ID"]]))) { $str_geo = $arGeo[$arIdBD[$arSection["ID"]]]; //echo "id = ".$arIdBD[$arSection["ID"]].", str_geo=$str_geo, arSection[ID] = ".$arSection["ID"].", arSection[NAME] = ".$arSection["NAME"]."<br>"; if ((strpos($str_geo, $user_country_code) === false) and ($str_geo != "")) { } else { $j++; if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]) echo "<ul>"; elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]) echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]); $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"]; // Наименование подтипа продукции в зависимости от языка $modeltype_name = $arSection["NAME"]; $cross[] = $modeltype_name; if ($Lang == "e") $modeltype_name = $arEngNames[$arSection["ID"]]; $section_url = $arSection["SECTION_PAGE_URL"]; ?> <li><?=$modeltype_name?></li> <? } // if ((strpos($str_geo, $user_country_code) === false) and ($str_geo != "")) } } Дерево заполняется из переменной $modeltype_name. Вид дерева после отработки: С системой No Frost (шириной 600 мм) Full No Frost Серия COMFORT+ ХМ 4421 N ХМ 4423 N ХМ 4424 N ХМ 4425 N ХМ 4426 N Frost Free Серия COMFORT+ ХМ 5124 F Комбинированные (двухкомпрессорные с нижним расположением морозильной камеры, шириной 600 мм) Серия COMFORT ХМ 6319 ХМ 6321 ХМ 6323 ХМ 6324 ХМ 6325 ХМ 6326 Серия GEOMETRY ХМ 6119 ХМ 6120 ХМ 6121 ХМ 6122 ХМ 6123 ХМ 6124 ХМ 6125 ХМ 6126 Серия ELEGANCE и т.д. И теперь собственное вопрос. Мне надо это все добавить в массив что бы сохранилась структура. Но возникла проблема со вложенностью, мне вот в сюда надо вставить добаление в массив if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]) echo "<ul>"; elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]) echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]); $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"]; В общем как добавлять в массив в глубину я не нашел. Намекните алгоритм. Рекурсивно не вышло. Может ключи где хранить отдельно? Или еще что? Мне нужен профит) Спасибо.
Чтобы создать многомерный массив, нужно у значения массива сделать значение массивом. Вот пример: PHP: <?php $arr = [ [ 'this' => 'hello', 'sub' => [ 'this' => 'hello sub', 'sub' => [ 'this' => 'hello sub sub', ], ], ], ];
Нет, ну это понятно)) Вопрос то не как он выглядит)) Мне нужно понянть как сделать вот так. Скрипт словами: PHP: Если удовлетворяет условию добавляем в массив $arr['k'] = $mass['n']; 2 итерация: $arr['k'][] = $mass['n'] 3 итерация: $arr['k']['k'][] = $mass['n']
Условие в коде выше) $arr['k']['k'][]=$mass['n'] ---> приведены как пример. --- Добавлено --- Если кому интересно, решение моей проблемы. Сравните с дефалтом выше.Вместо SWITCH(костыля) нужно рекурсия. Не было времени, пришлось костылить. PHP: $CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1; //echo "Manuals_ON=$Manuals_ON, Archive_ON=$Archive_ON,<br>"; $j = 0; $array_baf = array(); $array_baf2 = array(); $array_baf2 = ''; $baf_i=0; $lavel_op=0; $lavel_cl=0; foreach($arResult["SECTIONS"] as $arSection): $section=1; for($i=0;$i<count($parent);$i++) if(($arSection["ID"]==$parent[$i])||($arhiv[$arSection["ID"]]==1)) $section=0; // if(($arhiv[$arSection["ID"]]==1) and $Manuals_ON==1) $section=1; //echo "arSec[ID]=".$arSection["ID"]."par[$i]=".$parent[$i].", arh=".$arhiv[$arSection["ID"]]."<br>"; if($section==0 and $Manuals_ON==1 and ($arhiv[$arSection["ID"]]==1)) $section=1; if(($section==1)&&(($arSection["DEPTH_LEVEL"]==1)||($section_id==$arSection["ID"])||($arParent[$section_id]==$arSection["ID"])||($section_id==$arParent[$arSection["ID"]])||($arParent[$section_id]==$arParent[$arSection["ID"]])||($arParent[$arParent[$section_id]]==$arParent[$arSection["ID"]]))) { $str_geo = $arGeo[$arIdBD[$arSection["ID"]]]; //echo "id = ".$arIdBD[$arSection["ID"]].", str_geo=$str_geo, arSection[ID] = ".$arSection["ID"].", arSection[NAME] = ".$arSection["NAME"]."<br>"; if ((strpos($str_geo, $user_country_code) === false) and ($str_geo != "")) { } else { $j++; if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]){ $baf_i++; echo $baf_i.'<ul>'; //$array_baf[]='ul'; //$array_baf2 .= 'array('; } elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]){ $baf_i=$baf_i - ($CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]); echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]); //$array_baf2 .= '),'; //$array_baf2 = substr($array_baf2, 0, -1); //$array_baf[]='-ul'; } $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"]; // Наименование подтипа продукции в зависимости от языка $modeltype_name = $arSection["NAME"]; //$cross[] = $modeltype_name; if ($Lang == "e") $modeltype_name = $arEngNames[$arSection["ID"]]; $section_url = $arSection["SECTION_PAGE_URL"]; //$array_baf2 .=',['.$modeltype_name.']=>'; $array_baf2[$baf_i]=$modeltype_name; //$array_baf[$array_baf2[$baf_i-1]][]=$modeltype_name; switch($baf_i){ case'1': $array_baf[$array_baf2[0]][]=$modeltype_name; break; case'2': $array_baf[$array_baf2[0]][$array_baf2[1]][]=$modeltype_name; break; case'3': $array_baf[$array_baf2[0]][$array_baf2[1]][$array_baf2[2]][]=$modeltype_name; break; case'4': $array_baf[$array_baf2[0]][$array_baf2[1]][$array_baf2[2]][$array_baf2[3]][]=$modeltype_name; break; } //$array_baf[$array_baf2[$baf_i-1]][]=$modeltype_name; ?> <li><?=$modeltype_name?></li> <? //$array_baf[]='li'; } // if ((strpos($str_geo, $user_country_code) === false) and ($str_geo != "")) } endforeach; p($array_baf);
Согласен. Слався старый битрикс и тот кто этот код писал) Мне надо было из этого составить массив который бы сохранял структуру) Та еще задачка)
Вот я написал вручную пример структуры в этом сообщении https://php.ru/forum/threads/dobavlenie-v-massiv-v-glubinu.59365/#post-478892 ты тоже можешь показать какой хочешь получить результат, потом какой выходит и уже сможем тебе подсказать что изменить, просто вывалить код и даже не сделать var_export массива, то сложно будет тебе помочь