Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 18.12.2012
Сообщений: 40

Работа с многомерным массивом

06.05.2014, 01:49. Показов 866. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Имеется массив $arArray:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[0] => Array
        (
            [TEXT] => Раздел 1
            [CODE] => razdel_1
            [DEPTH_LEVEL] => 1
        )
[1] => Array
        (
            [TEXT] => Раздел 2
            [CODE] => razdel_2
            [DEPTH_LEVEL] => 2
            [ACC] => Y
        )
[2] => Array
        (
            [TEXT] => Раздел 3
            [CODE] => razdel_3
            [DEPTH_LEVEL] => 2
        )
[3] => Array
        (
            [TEXT] => Раздел 4
            [CODE] => razdel_4
            [DEPTH_LEVEL] => 3
            [ACC] => Y
        )
[4] => Array
        (
            [TEXT] => Раздел 5
            [CODE] => razdel_1
            [DEPTH_LEVEL] => 1
        )
[5] => Array
        (
            [TEXT] => Раздел 6
            [CODE] => razdel_6
            [DEPTH_LEVEL] => 2
        )
[6] => Array
        (
            [TEXT] => Раздел 7
            [CODE] => razdel_7
            [DEPTH_LEVEL] => 3
            [ACC] => Y  
        )
[7] => Array
        (
            [TEXT] => Раздел 8
            [CODE] => razdel_8
            [DEPTH_LEVEL] => 1
        )
...
Это структура разделов, с правильным порядком вложенности. Текущий массив - всегда такой на выходе и не имеет возможности редактироваться (по ряду причин).
Мне нужно в массивы первого уровня (в которых есть ключ [DEPTH_LEVEL] => 1) положить массивы с уровнем больше 1, у которых [ACC] => Y, например в ["CHILDRENS_W_ACC"]

Чтобы результат выглядел так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[0] => Array
        (
            [TEXT] => Раздел 1
            [CODE] => razdel_1
            [DEPTH_LEVEL] => 1
            [CHILDRENS_W_ACC] => Array
                                   (
                                       [0] => Array
                                                (
                                                    [TEXT] => Раздел 2
                                                    [CODE] => razdel_2
                                                    [DEPTH_LEVEL] => 2
                                                    [ACC] => Y
                                                )
                                       [1] => Array
                                                (
                                                    [TEXT] => Раздел 4
                                                    [CODE] => razdel_4
                                                    [DEPTH_LEVEL] => 3
                                                    [ACC] => Y
                                                )
                                     )
        )
[1] => Array
        (
            [TEXT] => Раздел 2
            [CODE] => razdel_2
            [DEPTH_LEVEL] => 2
            [ACC] => Y
        )
[2] => Array
        (
            [TEXT] => Раздел 3
            [CODE] => razdel_3
            [DEPTH_LEVEL] => 2
        )
[3] => Array
        (
            [TEXT] => Раздел 4
            [CODE] => razdel_4
            [DEPTH_LEVEL] => 3
            [ACC] => Y
        )
[4] => Array
        (
            [TEXT] => Раздел 5
            [CODE] => razdel_1
            [DEPTH_LEVEL] => 1
            [CHILDRENS_W_ACC] => Array
                                   (
                                       [0] => Array
                                                 (
                                                     [TEXT] => Раздел 7
                                                     [CODE] => razdel_7
                                                     [DEPTH_LEVEL] => 3
                                                     [ACC] => Y
                                                  )
                                    )
        )
[5] => Array
        (
            [TEXT] => Раздел 6
            [CODE] => razdel_6
            [DEPTH_LEVEL] => 2
        )
[6] => Array
        (
            [TEXT] => Раздел 7
            [CODE] => razdel_7
            [DEPTH_LEVEL] => 3
            [ACC] => Y  
        )
[7] => Array
        (
            [TEXT] => Раздел 8
            [CODE] => razdel_8
            [DEPTH_LEVEL] => 1
        )
...
Смотрел в сторону навигации по массивам, на функции типа next($arArray), но так и не придумал применение
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2014, 01:49
Ответы с готовыми решениями:

Работа с многомерным массивом
Вопрос как foreach вывести конкретную часть многомерного массива. Т.е вот массив к примеру $u = array('Администратор' =>...

Работа с многомерным массивом
здравствуйте , мне нужно отпарсить массив так чтобы я имел доступ к значениям разных столбцов массива. Тоесть сначала мог...

Работа с многомерным массивом и вывод данных
Добрый день. Имеется массив вида Array ( => 16 => 20 => Array ( => Значение 1 ...

2
284 / 283 / 73
Регистрация: 06.05.2013
Сообщений: 1,613
06.05.2014, 10:12
А почему Вы именно в первый положили два массива? Не совсем понял. объясните логику, как решить, что куда надо поместить

Можно попробовать сначала сформировать новый массив (а не менять текущий), а потом уже заменить целиком текущий новым
0
48 / 48 / 26
Регистрация: 31.05.2011
Сообщений: 139
06.05.2014, 11:40
Как я понял из вашей задачи, уровень вложенности результирующего массива будет не больше двух. Тогда примерно этот код:
PHP
1
2
3
4
5
6
7
8
9
foreach($arArray as $k => $v) {
    foreach($arArray as $kk => $vv) {
        if(!isset($arArray[$kk]['ACC']) || $arArray[$kk]['ACC'] != 'Y') break;
        
        if($arArray[$k]['DEPTH_LEVEL'] < $arArray[$kk]['DEPTH_LEVEL']) {
            $arArray[$k]['CHILDRENS_W_ACC'][] = $arArray[$kk];
        }
    }
}
Не тестировал, но смысл примерно такой. Если результирующий массив должен быть деревом, то смотрите в сторону рекурсий.

Даже интересно, что за подобие Битрикса такое?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2014, 11:40
Помогаю со студенческими работами здесь

Работа с текстовым файлом и многомерным массивом
Имеем файл 'rubrics.txt', содержимое которого фиксировано и выглядит следущим образом: Файлик, условно, содержит рубрики, подрубрики и...

Манипуляция с многомерным массивом
Есть некий массив, в котором может быть несколько массивов с двумя элементами - id и count. Важно, что id дублируются, а count везде...

Непонятка с многомерным массивом
есть массив $data который содержит данные полученные с БД, вот как он примерно выглядит при выводе через функцию var_export(): ...

Работа с многомерным ассоциативным массивом
Товрищи, подскажите новичку, как грамотно организовать работу с многомерным ассоциативным массивом? $.getJSON('rpc.php',...

Непонятная ситуация с многомерным массивом
Код довольно таки простой: $str = 'Я {самый|очень} хороший {программист|programmer|юзер} и {программист|хорерограф}. Танцевал на сцене...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru