Я хочу отправить ключ многомерного массива в функцию и получить значение этого ключа, это должен быть элемент или подмассив. Представь, у меня есть эта функция:
public function returnArray($index){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
return $arr[$index];
}
и когда я называю это так:
returnArray('[name][children][info]')
результат должен быть info
из этого массива.
Что я должен делать?
Заранее спасибо.
Просто к вашему сведению, этот код плохо пахнет — повторная реализация массива внутри строки заставляет меня думать, что, вероятно, это просто хорошая идея для доступа к массиву напрямую, например так:
$arr["name"]["children"]["info"]
Но ради полных ответов давайте напишем функцию, которая делает то, что вы хотите.
Во-первых, вместо передачи индекса в одной строке функции уже имеют параметры, поэтому давайте воспользуемся этой возможностью. Внутри функции вы можете получить массив, содержащий все переданные параметры, используя [func_get_args](http://php.net/manual/en/function.func-get-args.php)
,
// remove the parameter $index, as we don't know how many parameters there will be.
function returnArray(){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
// store reference to the position in the array we care about:
$position = $arr;
foreach(func_get_args() as $arg) {
// update the reference to the position according to the passed in parameters.
$position = $position[$arg];
}
return $position;
}
Тогда мы можем вызвать функцию следующим образом:
returnArray("children", "info");
/* Returns:
array(3) {
[0]=>
string(1) "a"[1]=>
string(1) "b"[2]=>
string(1) "c"}
*/
Если вы хотите вернуть массив 1 измерения из массива с 3 измерениями, вы можете отправить 3 аргумента, $ key1, $ key2 и $ key3, и возвращаемое значение будет массивом [$ key1] [$ key2] [ $ ключ3]
Вы можете сделать это так:
public function returnArray(){
$indexes = func_get_args();
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
$tmp = &$arr;
while($index = array_shift($indexes)){
$tmp = &$tmp[$index];
}
return $tmp;
}
Затем:
returnArray('name','children','info');
Но если ты хочешь the result should be info
затем сделайте:
returnArray('children','info');
Просто способ сделать это;)