Генерация ключа к элементу много мерного массива
Доброго времени есть у меня массив например выглядит от так:
$array;
Array (
[0] => Array (
[name] => Dan
[YO] => 34
)
[1] => Array (
[name] => Steve
[YO] => 22
)
[2] => Array (
[name] => Mike
[YO] => 27
)
)
это просто пример как может выглядеть массив - предположим ключи для работы с ним мне передаются строкой например так 0-name 2-YO
как я могу из строк сгенерировать путь к эелменту масив? я знаю что можно строкой сгенерировать php код и выполнить его через eval() но как по мне это костыль
массив может быть более мложный но ключи всегда передаются для него строкой
есть ли какой то способ сгенерировать путь к конкретному элементу например что бы это выглядело как то так
echo $array[$path]; - при сусловии что это было бы эквивалентно например $array[0]['name']
?
Ответы (2 шт):
$array = Array (
0 => Array (
'name' => 'Dan',
'YO' => 34,
),
1 => Array (
'name' => 'Steve',
'YO' => 22
),
2 => Array (
'name' => 'Mike',
'YO' => 27
)
);
$data = '0-name 2-YO';
$paths = explode(' ', $data);
foreach ($paths as $idx => $item) {
$path = explode('-', $item);
$itemsData[$idx] = [];
foreach( $path as $value ) {
if ( count($itemsData[$idx]) > 0 ) {
$itemsData[$idx] = $itemsData[$idx][$value];
} else {
$itemsData[$idx] = $array[$value];
}
}
}
var_dump($itemsData); // array("Dan",27)
Ничего сложного. Разбиваем строку на отдельные части - искомые данные, потом уже эти искомые данные разбиваем на отдельные части - ключи в массиве данных, и ищем данные используюя эти же ключи
$array = array (
0 => array (
'name' => 'Dan',
'YO' => 34,
),
1 => array (
'name' => 'Steve',
'YO' => 22
),
2 => array (
'name' => 'Mike',
'YO' => array('a' => 33, 'b' => 44)
)
);
function path(& $a, $path)
{
foreach(explode('-', $path) as $p)
{
if(isset($a[$p])) $a =& $a[$p];
else return null;
}
return $a;
}
var_dump(path($array, '2-YO-a')); // int(33)
var_dump(path($array, '5-YO')); // NULL