Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
-37 / 7 / 1
Регистрация: 02.03.2015
Сообщений: 253
1

Как получить ключи в трёхмерном массиве?

01.02.2019, 16:04. Просмотров 908. Ответов 8
Метки нет (Все метки)

Как получить ключи в трёхмерном массиве?

Дано:

$nazstr['11']['22']['33']=44;
$nazstr['55']['66']['77']=88;

----

Нужно получить:

$u1='11';
$u2='22';
$u3='33';
$u4='44';

в цикле по $nazstr
------------------------------------------------------------

Сейчас делаю так:

PHP
1
2
3
4
    foreach ($nazstr as $u1=>$v){
        foreach ($v as $u2=>$v2){
            foreach ($v2 as $u3=>$u4){
}}}
Не красиво. Хочется красиво. Спасибо.

Добавлено через 4 минуты
Цитата Сообщение от miltorg Посмотреть сообщение
foreach ($nazstr as $u1=>$v){
* * * * foreach ($v as $u2=>$v2){
* * * * * * foreach ($v2 as $u3=>$u4){
}}}
А так уже красивей :-)

PHP
1
2
3
4
foreach ($nazstr as $u1=>$v){foreach ($v as $u2=>$v2){foreach ($v2 as $u3=>$u4){
 
 
}}}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2019, 16:04
Ответы с готовыми решениями:

Создать ключи в трехмерном массиве
Есть массив struct, кот. заполняется следующим образом: $struct = array(); $struct =...

Как записать Z в трёхмерном массиве
ребята, простите за дурной вопрос, но не могу разобраться. есть массив const int Y = 2, X = 2,...

Как удалить элемент в трехмерном массиве
День добрый, Есть 3х мерный массив, который представляет собой набор дву-мерных матриц. Каждой...

Как заменить 0 в трехмерном массиве, которые находятся между определенными числами, на -1?
На вход программе дается размер матрицы (n), далее мы увеличиваем ее, но нумеруем только...

8
975 / 667 / 324
Регистрация: 09.07.2018
Сообщений: 1,610
01.02.2019, 16:22 2
miltorg,
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
$nazstr['11']['22']['33'] = 44;
$nazstr['55']['66']['77'] = 88;
 
$keys = [];
foo($nazstr);
 
function foo($arr)
{
    global $keys;
    foreach ($arr as $key => $item) {
        $keys[] = $key;
        ! is_array($item) ?: foo($item);
    }
}
 
var_dump( $keys );
/*
array(6) {
  [0]=> int(11)
  [1]=> int(22)
  [2]=> int(33)
  [3]=> int(55)
  [4]=> int(66)
  [5]=> int(77)
}
*/
0
-37 / 7 / 1
Регистрация: 02.03.2015
Сообщений: 253
01.02.2019, 16:41  [ТС] 3
Как то не проще. И не наглядней.

Я думал может функция какая есть встроенная.

Добавлено через 9 минут
И!
$u1='11';
$u2='22';
$u3='33';
$u4='44';

в цикле по $nazstr

------------------

То есть получаем 4 переменные - записываем их в базу
Есть ещё 4 переменные? - делаем ещё что то в зависимости от их значения.
Переменных больше нет? - продолжаем программу
Это обработчик Пост.

Добавлено через 2 минуты
VNIIAEN, у вас написано тоже что и у меня только через рекурсию.
0
Эксперт PHP
4256 / 3472 / 1472
Регистрация: 24.04.2014
Сообщений: 10,307
01.02.2019, 17:07 4
Как я понимаю, вопрос связан с этой темой Как передать в одном поле несколько значений?
Если так, то будет лучше генерировать форму с такими инпутами
HTML5
1
2
3
4
5
6
7
8
9
<input type="hidden" name="nazstr[0][lng]" value="value">
<input type="hidden" name="nazstr[0][uroven]" value="value">
<input type="hidden" name="nazstr[0][prinadlezhit]" value="value">
 
<input type="hidden" name="nazstr[1][lng]" value="value">
<input type="hidden" name="nazstr[1][uroven]" value="value">
<input type="hidden" name="nazstr[1][prinadlezhit]" value="value">
 
<!-- etc -->
И обходить полученный массив можно будет простым foreach
PHP
1
2
3
foreach ($nazstr as $i => ['lng' => $lng, 'uroven' => $uroven, 'prinadlezhit' => $prinadlezhit]) {
    var_dump($i, $lng, $uroven, $prinadlezhit);
}
0
975 / 667 / 324
Регистрация: 09.07.2018
Сообщений: 1,610
01.02.2019, 17:08 5
Цитата Сообщение от miltorg Посмотреть сообщение
у вас написано тоже что и у меня только через рекурсию.
А глубина массива ограничена? Рекурсия - для произвольной глубины. Кстати, вам ничего не мешает получить по 4-е элемента из массива функцией array_slice(). Но читая этот ваш последний пост, закрадывается сомнение о правильности выбранной вами реализации для этой задачи.
0
-37 / 7 / 1
Регистрация: 02.03.2015
Сообщений: 253
01.02.2019, 17:26  [ТС] 6
Цитата Сообщение от VNIIAEN Посмотреть сообщение
А глубина массива ограничена?
Дано:

$nazstr['11']['22']['33']=44;
$nazstr['55']['66']['77']=88;

----------------------

Или про что вы?

Добавлено через 1 минуту
Цитата Сообщение от VNIIAEN Посмотреть сообщение
Кстати, вам ничего не мешает получить по 4-е элемента из массива функцией array_slice()
Мне не значения нужны. Мне нужны ключи.

Добавлено через 6 минут
Jewbacabra, нет.

Дело в том, что я всё уже сделал и во множестве полей написано:

HTML5
1
<input name="nazstr[<?=lng?>][<?=uroven?>][<?=prinadlezhit?>]" form="data">
и обрабатывается это так:

PHP
1
2
3
4
5
foreach ($_POST['nazstr'] as $lng5=>$v){foreach ($v as $uroven5=>$v2){
   foreach ($v2 as $prinadlezhit5=>$namestr5){
        if ($namestr5) {
            //....
    }}}}
Добавлено через 54 секунды
Поля я уже менять не буду. А обработчик - можно и поменять.
0
1655 / 995 / 369
Регистрация: 13.06.2013
Сообщений: 3,403
01.02.2019, 17:29 7
Jewbacabra,

Этот как? Что за массив после $i =>
PHP
1
2
3
foreach ($nazstr as $i => ['lng' => $lng, 'uroven' => $uroven, 'prinadlezhit' => $prinadlezhit]) {
   var_dump($i, $lng, $uroven, $prinadlezhit);
}[/quote]
0
975 / 667 / 324
Регистрация: 09.07.2018
Сообщений: 1,610
01.02.2019, 17:42 8
Цитата Сообщение от miltorg Посмотреть сообщение
Мне не значения нужны. Мне нужны ключи
Дак в результирующем массиве и будут ключи. А для массива $nazstr['11']['22']['33'] - да, три форича подойдут.
0
Jewbacabra
01.02.2019, 18:11     Как получить ключи в трёхмерном массиве?
  #9

Не по теме:

tarasalk, https://secure.php.net/manual/... tructuring

0
01.02.2019, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2019, 18:11
Привет! Вот еще темы с ответами:

Как заменить ключи в массиве
Здравствуйте, есть массив: array(2) { =&gt; string(5) &quot;brand&quot; =&gt; string(8)...

Как получить ключи всех элементов определённого уровня ассоциативного многомерного массива?
Например, массив: Array( город1 =&gt; Array( склад1 =&gt; Array( яблоки =&gt; 45; бананы =&gt;...

Тени в трехмерном массиве.
Тени. В трехмерном массиве k(l, m, n), состоящем из нулей и единиц, хранится сеточное изображение...

Найти min в трехмерном массиве
Помогите доработать программу чтобы выводился min в трёхмерном массиве(сейчас ищет максимальное)...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.