我有一个数组$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的评论)