Вызовите массив с помощью array_key и получите значение массива

Я хочу отправить ключ многомерного массива в функцию и получить значение этого ключа, это должен быть элемент или подмассив. Представь, у меня есть эта функция:

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 из этого массива.

Что я должен делать?

Заранее спасибо.

0

Решение

Просто к вашему сведению, этот код плохо пахнет — повторная реализация массива внутри строки заставляет меня думать, что, вероятно, это просто хорошая идея для доступа к массиву напрямую, например так:

$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"}
*/
0

Другие решения

Если вы хотите вернуть массив 1 измерения из массива с 3 измерениями, вы можете отправить 3 аргумента, $ key1, $ key2 и $ key3, и возвращаемое значение будет массивом [$ key1] [$ key2] [ $ ключ3]

0

Вы можете сделать это так:

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');

Просто способ сделать это;)

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector