@fastboot

PHP $array[$custom_path] как указать свой путь?

Имею вот это:
$map[] = tree;
$map[] = items;
$map[] = 0;
$map[] = items;
$map[] = 5;
$map[] = items;
$map[] = 1;
$map[] = items;
$map[] = 0;

Использовать $map для построения ветки, что бы эту ветку использовать как указатель массива.

$array [вот тут я хочу указать путь ветки][name] = "New name";
$array [вот тут я хочу указать путь ветки][name_img] = "./favicon.ico";
$array [вот тут я хочу указать путь ветки][name_description] = "New description";

Хочу примерно сделать это:
$path = [tree][items][0][items][5][items][1][items][0][name];
$array{[$path]} = "New name";

Если что:
var_dump( $array[tree][items][0][items][5][items][1][items][0][name] );
Возвращает:
string(20) "Дополнительный пункт"

Нужно просто $path указать путь в массиве и установить новые параметры в этой ветке массива.
Почему? потому что есть рекурсия ветки, веток дерево может быть бесконечно (утрирую, просто много)
  • Вопрос задан
  • 478 просмотров
Решения вопроса 1
@fastboot Автор вопроса
function tree_array_read (array $array, array $map)
{
$path = "[tree]";
foreach ( $map as $ID => $VALUE)
{

$path .= "[items][{$VALUE}]";
}

$code = "\$out = \$array{$path};";
eval ( $code );
return $out;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Телепат говорит мне, что это какой-то парсер и можно вклиниться немного раньше с xpath или jsonpath запросами для получения нужных данных.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Как раз сегодня был вопрос о конвертации многомерного массива в одномерный
Как сконвертировать многомерный ассоциативный массив в одномерный с сохранением пути?

Конвертируете исходный массив в плоский, и тогда путь до любого элемента можно будет задать строкой.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽