@MarkJSexton

Как конкатенировать вложенность массива?

Добрый день! Столкнулся с проблемой следующего плана.
Имеется массив отдающий некую вложенность категорий и подкатегорий, суть проблемы заключается в том, что я никак не могу додумать до решения, как конкатенировать вложенность в цикле...

К примеру имеется массив:

$path = array(
  [0]=> 44
  [1]=> 34
  [2]=> 0
);


В ходе цикла на каждой итерации я должен конкатенировать 3 составляющие т.к:

  1. $data

    1. [$key] - при условии того, что count($path) == 1
    2. ['children'][[$key] - при условии того, что count($path) > 1


  2. ['opened'] = true


По итогу должно получаться, что цикл на кажой итерации добавляет флаг true ключу ['opened']

Единственная итерация с условием того, что длина массива не больше 1-го элемента:
$menu[$key]['opened'] = true

2-ая итерация:
$menu[$key]['children'][$key]['opened'] = true

3-ая итерация:
$menu[$key]['children'][$key]['children'][$key]['opened'] = true


и т.д.

Был ли у кого похожий опыт или может есть идеи, как решить данную проблему?
Спасибо за уделенное мне внимание!
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
twobomb
@twobomb
Не знаю правильно ли понял ну вот пример

function ss(&$arr,$path,$cur = 0){
        if(isset($arr[$path[$cur]])){
            $arr[$path[$cur]]["active"] = true;
            if($cur+1 < count($path))
                ss($arr[$path[$cur]]["children"],$path,$cur+1);
        }
}

$arr
$arr = array (
    array (
        'name' => '-1 пункт',
        'active' => false,
        'children'=> array(),
    ),
    array (
        'name' => '0 пункт',
        'active' => false,
        'children'=> array(),
    ),
     array (
        'name' => '1 пункт',
        'active' => false,
        'children'=> array(
            array(
                'name' => '1.0 пункт',
                'active' => false,
                'children' => array(),
            ),
             array(
                'name' => '1.1 пункт',
                'active' => false,
                'children' => array(
                    array(
                        'name' => '1.1.0 пункт',
                        'active' => false,
                        'children' => array(),
                    ),
                    array(
                        'name' => '1.1.0 пункт',
                        'active' => false,
                        'children' => array(),
                    )
                ),
            ),
            array(
                'name' => '1.2 пункт',
                'active' => false,
                'children' => array(),
            ),
        ),
    ),
    array (
        'name' => '2 пункт',
        'active' => false,
        'children'=> array(),
    ),
);


$path = [  2,1,1    ];    
    var_dump($arr);//реузльтат до входа
    ss($arr,$path);
    var_dump($arr);//реузльтат после входа

реузльтат до входа

array(4) {
[0]=>
array(3) {
["name"]=>
string(13) "-1 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(12) "0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[2]=>
array(3) {
["name"]=>
string(12) "1 пункт"
["active"]=>
bool(false)
["children"]=>
array(3) {
[0]=>
array(3) {
["name"]=>
string(14) "1.0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(14) "1.1 пункт"
["active"]=>
bool(false)
["children"]=>
array(2) {
[0]=>
array(3) {
["name"]=>
string(16) "1.1.0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(16) "1.1.0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
}
}
[2]=>
array(3) {
["name"]=>
string(14) "1.2 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
}
}
[3]=>
array(3) {
["name"]=>
string(12) "2 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
}


реузльтат после входа

array(4) {
[0]=>
array(3) {
["name"]=>
string(13) "-1 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(12) "0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[2]=>
array(3) {
["name"]=>
string(12) "1 пункт"
["active"]=>
bool(true)
["children"]=>
array(3) {
[0]=>
array(3) {
["name"]=>
string(14) "1.0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(14) "1.1 пункт"
["active"]=>
bool(true)
["children"]=>
array(2) {
[0]=>
array(3) {
["name"]=>
string(16) "1.1.0 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
[1]=>
array(3) {
["name"]=>
string(16) "1.1.0 пункт"
["active"]=>
bool(true)
["children"]=>
array(0) {
}
}
}
}
[2]=>
array(3) {
["name"]=>
string(14) "1.2 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
}
}
[3]=>
array(3) {
["name"]=>
string(12) "2 пункт"
["active"]=>
bool(false)
["children"]=>
array(0) {
}
}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы