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

时间:2016-07-12 14:10:55

标签: php arrays dynamic-arrays

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

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 个答案:

答案 0 :(得分:0)

如果要从具有3维的数组返回1维数组,可以发送3个参数,$ key1,$ key2和$ key3,返回值为array [$ key1] [$ KEY2] [$ KEY3]

答案 1 :(得分: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"
}
*/

答案 2 :(得分: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');

只是一种方法;)