在以下yaml文本中检索子项名称 where exposed is true ?
的 INPUT 的
parent:
child1:
units:
machine: 1
name: Cathy
relation: daughter
boolean: true
child2:
exposed: true
units:
machine: 2
name: Peter
relation: son
boolean: false
预期输出
彼得
当前代码
//input
$yaml = <<<EOD
parent:
child1:
units:
name: Cathy
relation: daughter
child2:
exposed: true
units:
name: Peter
relation: son
EOD;
//convert to array
$parsed = yaml_parse($yaml);
//get all values from specific key in a multidimensional array
var_dump(array_value_recursive('name', $parsed));
/**
* Get all values from specific key in a multidimensional array
*
* @param $key string
* @param $arr array
* @return null|string|array
*/
function array_value_recursive($key, array $arr){
$val = array();
array_walk_recursive($arr, function($v, $k) use($key, &$val){
if($k == $key) array_push($val, $v);
});
return count($val) > 1 ? $val : array_pop($val);
}
当前输出
凯西 彼得
在上面的输出中,Cathy是不需要的条目。 正确的输出应该是彼得。
提前致谢:)
答案 0 :(得分:0)
好吧,我没有看到任何exposed=true
条款。
您正在遍历阵列并搜索name
键,如果找到它,则将其推送到阵列。您缺少额外的if (exposed == true)..
只有逻辑才能获得所有条目的数组。