kpa6uu
@kpa6uu
Программист Талибана [Пыхерский Алибаба]

Как «пройти» по ключам массива?

Имеем массив следующего вида:

$array = array(
	'one' => 'hi',
	'two' => 'privet',
	'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
);

Имею следующую строку:

$str = 'three|three_1';

Как обратиться к ячейке массива по данной строке?

Пытался следующим образом, не вышло:

$exp = explode('|', $str);
$key = '["'.implode('"]["', $exp).'"]'; //["three"]["three_1"]
var_dump($array[$key]); //null
  • Вопрос задан
  • 1033 просмотра
Решения вопроса 3
для этого узкого примера как-то так:
$array = array(
  'one' => 'hi',
  'two' => 'privet',
  'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
);

$str = 'three|three_1';

$keys = explode("|", $str);

var_dump($array[$keys[0]][$keys[1]]);


Updated 1:
<?php

function foo($array, $str){
	$keys = explode('|', $str);
	
	$keysCount = count($keys);
	
	$result = $array;
	for($i = 0; $i < $keysCount; $i++){
		if(!is_array($result) && $i < ($keysCount - 1)){
			throw new Exception("Array depth not expected");
		}
		
		if(!isset($result[$keys[$i]])){
			throw new Exception(sprintf("Key '%s' not found", $keys[$i]));
		}
		
		$result = $result[$keys[$i]];
	}
	
	return $result;
}

$array = array(
  'one' => 'hi',
  'two' => 'privet',
  'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
);

$str = 'three|three_1';

var_dump(foo($array, $str));
Ответ написан
Antonchik
@Antonchik
Программирую на HTML
$array = array(
    'one' => 'hi',
    'two' => 'privet',
    'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
);

foreach ($array as $key => $item) {
    echo $key;
}
Ответ написан
@entermix
Используйте array_map + рекурсия (если произвольная вложенность)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы