【问题标题】:Use A Variable for an Array of Keys in Multidimentional Arrays in PHP在 PHP 中为多维数组中的键数组使用变量
【发布时间】:2017-02-25 06:10:07
【问题描述】:

我有一个数组 $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'];
}

按预期输出“我的标题”。

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

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

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

或者类似的?

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

echo get_array_value($array, $array_keys);

但希望朝着正确的方向推进。

【问题讨论】:

  • 是否需要从数组中取出数据?你想做什么?
  • 是的,因此问题;)。我想在创建数组之前将“路径”设置为正确的键/值对。
  • 路径总是一样吗?
  • 不,因此我想设置一个变量。

标签: php arrays multidimensional-array


【解决方案1】:

首先,看这里:

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

这是live demo(取自@Evanrose 的comment

【讨论】:

  • 这个解决方案是否灵活适用于任何级别的嵌套
  • @EaBangalore 是的,这个解决方案对于任何级别的嵌套都很灵活。
  • 对不起,我不是所有者(问题)
  • @EaBangalore 啊,看来我需要更多的咖啡。 ;-)
  • 这很好用,除了递归函数在到达第一个以数组为值但不知道为什么的键后停止。这是live demo。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2019-07-24
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多