用 array_key 调用数组并获取数组值

Call array with array_key and get the array value

我想将多维数组的一个键发送给一个函数并获取该键的值,它应该是一个项目或子数组。想象一下我有这个功能:

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

我该怎么办?

提前致谢。

如果您要从 3 维数组中寻找 return 1 维数组,您可以发送 3 个参数,$key1、$key2 和 $key3,以及 return值将是数组[$key1][$key2][$key3]

仅供参考,这段代码闻起来很糟糕 - 在字符串中重新实现数组,这让我觉得像这样直接访问数组可能是个好主意:

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

你可以这样做:

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

这只是一种方法;)