У меня есть переменная $temp
которая содержит:
['test1']['test2']['test3']
Я хочу получить значение этой переменной в массиве: $array
.
Я пробовал $array[$temp]
и другие возможности.
getNavItemIndex
возвращает массив, содержащий позицию getNavItemIndex
значения
Редактировать:
$input = array();
$input['level0']['level1']['somekey'] = "value of somekey";
$input['level0']['level1']['somekey2'] = "value of somekey2";
$input['level0']['level1b']['somekey1b'] = "value of somekey1b";
$input['level0']['level1']['level2']['somekey1c'] = "value of somekey1c";
$json1 = getNavItemIndex($input, "value of somekey1c");
foreach ($json1 as $key => $value) {
$temp .= "['";
$temp .= $value;
$temp .= "']";
}
echo $temp; // ['level0']['level1']['level2']['somekey1c']
echo $input[$temp]; //value of somekey1c
Изменен ответ после редактирования.
$output = null;
for($i = 0; $i < count($temp); $i++) {
if($output === null && isset($input[$temp[$i]])) {
$output = $input[$temp[$i]];
}elseif (isset($output[$temp[$i]])) {
$output = $output[$temp[$i]];
}else {
$output = null;
}
}
echo $output;
Вам также нужно отредактировать код при создании массива temp.
$temp = [];
foreach ($json1 as $key => $value) {
$temp[] = $value;
}
Обновление Более красноречивое и многоразовое решение.
function getByKeys($arr, $keys) {
$key = array_shift($keys);
if(isset($arr[$key])) {
if(count($keys) > 0) {
return getByKeys($arr[$key], $keys);
}else {
return $arr[$key];
}
}else {
throw new Exception('Key is not isset');
}
}
echo getByKeys($input, $temp);