从Array获取值作为数组键

时间:2015-05-10 05:13:37

标签: php arrays key

如何从数组中递归获取我需要爆炸键的值? 我知道,这个问题并不好,让我解释一下。

我有一个数组

[
  "abc" => "def", 
  "hij" => [
              "klm" => "nop", 
              "qrs" => [
                          "tuv" => "wxy"
                       ]
           ]
]

所以,在函数内部,我传递:

function xget($section) {
    return $this->yarray["hij"][$section];
}

但是当我想用这个函数得到tuv值时,我想把section作为数组,例如:

要获得hij.klm值(nop),我会xget('klm'),但要获得hij.klm.qrs.tuv,我无法xget(['qrs', 'tuv']),因为PHP将$section视为关键,并不会递归地爆炸它。没有使用某些if$section[$i]

,有什么方法可以做到这一点

3 个答案:

答案 0 :(得分:0)

function xget($section) {
    return $this->yarray["hij"][$section];
}

那个是静态功能吗?

你也可以为这个

做到这一点
function xget($section) {
    if(isset($this->yarray["hij"][$section])){
         return $this->yarray["hij"][$section];
    }elseif(isset($this->yarray["hij"]["klm"]["qrs"][$section])){
         return $this->yarray["hij"]["klm"]["qrs"][$section];
    }
}

只要其中两个之间的密钥名称不相同。

答案 1 :(得分:0)

无论嵌套结构如何,您都可以使用array_walk_recursive查找tuv的值:

$tuv_val='';
function find_tuv($k,$v)
{
   global $tuv_val;
   if ($k=='tuv')
      $tuv_val=$v;
}
array_walk_recursive($this->yarray,"find_tuv");
echo "the value of 'tuv' is $tuv_val";

答案 2 :(得分:0)

试试我的代码

<?php

    $array = array(
            'aaa' => 'zxc',
            'bbb' => 'asd',
            'ccc' => array(
                    'ddd' => 'qwe',
                    'eee' => 'tyu',
                    'fff' => array(
                                'ggg' => 'uio',
                                'hhh' => 'hjk',
                                'iii' => 'bnm',
                            ),
                ),
        );

    $find = '';

    function xget($key){
        $GLOBALS['find'] = $key;
        $find = $key;
        array_walk_recursive($GLOBALS['array'],'walkingRecursive');
    }


    function walkingRecursive($value, $key)
    {
        if ($key==$GLOBALS['find']){
            echo $value;
        }
    }


    xget('ggg');
?>