Итак, я ищу способ преобразовать строку в переменную... Мне нужно получить данные из массива $Map В качестве ключа я использую $URL, который получает данные из реального URL и отделяет их... $URL = взорвать("/",$URL); Поэтому, когда я получаю доступ к значениям $Map, это нужно писать так:
$Map[$URL[0]][$URL[1]][$URL[2]][$URL[3]][$URL[4]][$URL[5]]
Поэтому я решил создать функцию, которая генерирует количество [$URL[0]] вроде
function GenerateURl($i){for ($x = 0; $x <= $i; $x++){
$URls.='$URL['.$x.']';
}
return($URls);}
Почему? У меня есть карта страниц, которые могут принимать посещения, вот что содержит $MAP, у каждого измерения есть настройки стиля и содержимого, но я действительно не хочу вводить каждое отдельное измерение вручную + его больно поддерживать его...
if ($Map[$URL[0]){ #Check if first dimension exist (Index.php/example)
if....... #this take much more steps to verify if there is request for child, and if child exist, ofc there is else method that redirect to closest parent page
$Style = "style_for_page.css";
$Contend = "style_for_page.css";
}
else{
header("Location: https://example.com");
}
Я не знаю, что я делаю неправильно... Но когда я вызываю свою функцию GenerateURl(5) вывод - это строка... не работает переменная... так что это похоже на
$URL[0]$URL[1]$URL[2]$URL[3]$URL[4]
и не нравится
Пример конфиденциальности настроек пользователя профиля...... (example.com/Profile/User/Settings/Privacy/Examle)
Обновлять: Чтобы упростить мой вопрос... Мне нужно это:
$MAP = array(........) ;
$URL = array("example");
$var = "[$URl[0]]"; #$URL need to be transferred as text to print part
Print($Map[$var]);
возможно, вы хотите взорвать строку URL и разделить ее на /; $array = explode('/',$_SERVER['REQUEST_URI']);
понятия не имею, что вы подразумеваете под «рабочим варом». Вы про массив, наверное?
, P.S. Было бы очень полезно, если бы вы привели пример строки, которую вы пытаетесь проанализировать, и точный результат, который вы хотите получить в конце - боюсь, ваш пример вывода в настоящее время не имеет особого смысла.
when I call my function GenerateURl(5) output is string... ну да, .= добавляет строку к другой строке, так что этого и следовало ожидать. Вы действительно пытаетесь разделить строку URL на разные индексы массива? Если это так, взрыв, вероятно, поможет, как упоминалось выше.
Просто мне нужно поместить [$URL[0]][$URL[1]] за $Map... Для этого: $Map[$URL[0]][$URL[1]]... Сумма " [$URL[1.....99999]]" является динамическим
Дайте нам реальный пример $URL, который мы могли бы использовать для создания демо.
$URL из браузера, он зависит от адреса, например: если URL-адрес www.example.com/profile/setting/test/idknow, то $URL=("profile", "settings", "test", "idknow")
Хорошо. Итак, как вы ожидаете, что результат Print($Map[$var]); будет в конце в этом примере?
Итак, если адрес: www.example.com/profile, тогда мне нужен код: Print($Map[$URL[0]] ), который в этом примере совпадает с Print($Map["profile"] ). .... Если адрес www.example.com/profil/setting. Затем мне нужно Print($Map[$URL[0]][$URL[1]])... Я бы описал это как... Распечатать столько [$URL[0]], сколько я хочу... Число должно увеличиться на 1..... $Map[$URL[0]][$URL[1]][$URL[2]] количество "URL" является динамическим... Иногда мне нужно напечатать 1 иногда 10 ... Вывод очень сложный... Я проверяю, существует ли ($Map[$URL[0]])... Проверяю, содержит ли он более 3 дочерних элементов... Карта представляет собой 1...10-мерный массив
Давайте продолжим обсуждение в чате.






Вы не можете сделать это именно так, как вы себе представляете — PHP не может сгенерировать исполняемый набор кода доступа к массиву (ну, вы могли бы, а затем выполнить его с помощью eval , но вы действительно не не хочу этого делать если нет другого выхода).
Лучший способ — передать аргументы вспомогательной функции, которая затем будет постепенно перебирать целевой массив, используя каждый из предоставленных аргументов.
Другая задача, конечно, состоит в том, чтобы разбить строку URL на части с помощью explode. Похоже, вы хотите игнорировать первые части (протокол и домен) и просто смотреть на элементы пути.
Этот код должен делать то, что вам нужно, я думаю:
function flatCall($data_arr, $data_arr_call){
$current = $data_arr;
foreach($data_arr_call as $key){
$current = $current[$key];
}
return $current;
}
$MAP = array("profile" => array("setting" => array("test" => array("idknow" => "someValue"))));
$urlString = "www.example.com/profile/setting/test/idknow";
$URL = explode("/", $urlString); //split URL string into an array
array_shift($URL); //remove first element
$result = flatCall($MAP, $URL);
echo $result;
Живая демонстрация: https://3v4l.org/A3Z1H
Кредит https://stackoverflow.com/a/36334761/5947043 для вспомогательной функции - прочитайте этот ответ для объяснения того, как это работает.
что такое
var?