在PHP的多维数组中为键数组使用变量



我有一个数组$json_data,我试图用for循环解析:

这是一个数组:

array(2) {
    ["data"]=>
    array(4) {
        ["children"]=>
        array(25) {
            [0]=>
            ["first_key"]=>
            array(50) {
                ["second_key"]=> 
                string(9) "My Title"
            }
        }
    }
}

然后在PHP中,我将其设置为$json_data并开始使用for循环提取数据

foreach  ( $json_data['data']['children'] as $key => $value ) {
    echo $title = $value['first_key']['second_key'];
}

按预期输出"My Title"。

我的问题(如果我的问题措辞不好,请建议)是,我可以设置键作为一个变量吗?我知道我不能将它设置为字符串,但我可以将键数组传递给$value,如:

$key_array = array('first_key' => array('second_key'));
foreach  ( $json_data['data']['children'] as $key => $value ) {
    echo $title = $value[$key_array];
}

或者类似的东西?

创建一个函数,我可以将$数组传递给具有$key_array集的函数,这也会很好,如:

get_array_value($array, $array_keys);

但我希望你能朝正确的方向推我一把。

首先看这里:

$key_array = array('first_key' => array('second_key'));

不声明一个多维键数组,而是声明一个简单的数组,其中包含您希望从原始数组$json_data中获取其值的所有键,如下所示:

$array_keys = array('second_key', 'another_key');

第二,根据你的问题:

创建一个可以将$array传递给具有$key_array集的函数的函数也很棒,例如:

echo get_array_value( $array, $array_keys );

是的,这当然是可能的。的解决方案是:

  • 编写一个函数get_array_value(),并将原始数组$json_data和键数组$array_keys传递给该函数。
  • get_array_value()函数内创建一个foreach循环,循环遍历$array_keys数组。在循环的每次迭代中,调用另一个递归实用函数get_array_value_utility()
  • get_array_value_utility()函数将递归地循环遍历数组并从数组中获取所需的值。
下面是代码:
function get_array_value_utility($array, $key){
    foreach($array as $k => $v){
        if($key == $k){
            return $v;
        }else if(is_array($v)){
            $v = get_array_value_utility($v, $key);
            if ($v != null) return $v; 
        }
    }
}
function get_array_value($array, $array_keys){
    $values = array();
    foreach($array_keys as $key){
        $values[] = get_array_value_utility($array, $key);
    }
    return $values;
}
$array_keys = array('second_key', 'another_key');
$values = get_array_value($json_data, $array_keys);
// display $values array
var_dump($values);  

这是现场演示(取自@Evanrose的评论)

相关内容

  • 没有找到相关文章

最新更新