Вывести элемент массива

latteo

Эффективное использование PHP, MySQL
Регистрация
27 Фев 2008
Сообщения
1.603
Реакции
1.565
@Black#FFFFFF, в обновленном варианте есть SPL`ный ArrayIterator Для просмотра ссылки Войди или Зарегистрируйся хотя суть почти та же :)

@Горбушка, итерация (foreach и т.п.) + рекурсия в самый раз для таких задач.
Нечто похожее, но в другом формате есть у Yii2 хелпера Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся
 

latteo

Эффективное использование PHP, MySQL
Регистрация
27 Фев 2008
Сообщения
1.603
Реакции
1.565
Вообще странно, что такой вариант не работает:
PHP:
$row['car2']['color']['code'] = 2;
$varname = "row['car2']['color']['code']";
echo $varname . '= ' . ${$varname};

Он работает :) Это возможность задать в имени переменной всякую ересь, которую парсер не пропустил бы ;)

PHP:
        $varName = "row['car2']['color']['code']";
        $$varName = "some value";

        $concatVarName = "row" . "['car2']" . "['color']" . "['code']";
        echo $$concatVarName;
 
  • Нравится
Реакции: Nei

Nei

Nosce te ipsum
Команда форума
Модератор
Регистрация
5 Сен 2009
Сообщения
688
Реакции
603
Он работает :) Это возможность задать в имени переменной всякую ересь, которую парсер не пропустил бы ;)

PHP:
        $varName = "row['car2']['color']['code']";
        $$varName = "some value";

        $concatVarName = "row" . "['car2']" . "['color']" . "['code']";
        echo $$concatVarName;

Т.е. это разные переменные с точки зрения интерпретатора, это объясняет ошибку undefined variable. Гениально))
PHP:
$row['car2']['color']['code'] = 123;

$varName = "row['car2']['color']['code']";
$$varName = "some value";

echo $row['car2']['color']['code'] . ' != ' . $$varName ;

...новые для меня недокументированные особенности php %)

Собственно, тогда вот решение первоначальной задачи, достаточно просто изменить способ инициализации массива с данными:
PHP:
//row array key
$row = "row['car2']['color']['code']";
//row array value
$$row = 123;

$name = "['car2']['color']['code']";

echo ${"row$name"};
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Нет, не решение...
var_dump($row);
Просто переменная получает очень кривое имя, но не становится массивом :)
 

Nei

Nosce te ipsum
Команда форума
Модератор
Регистрация
5 Сен 2009
Сообщения
688
Реакции
603
Нет, не решение...
var_dump($row);
Просто переменная получает очень кривое имя, но не становится массивом :)

Да, не становится, но вроде ничего же не мешает всё равно её использовать, просто инициализировать так:
PHP:
//row array key
$row = "row['car2']['color']['code']";
//row array value
$$row = 123;
Для того, чтобы в цикле пройтись по всем значениям, насколько я понимаю, есть список индексов по типу "['car2']['color']['code']".
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
В общем, переделал на рекурсию - всё пашет как хотел ) Но количество рекурсий в скрипте меня уже напрягает - как оно работает я уже не понимаю. В моей голове рекурсия в рекурсии внутри функции с рекурсией уже не обрабатываются :crazy:
 
Сверху