如何根据病情提取Yaml的特定部分?

时间:2011-12-15 08:00:53

标签: php yaml

在以下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是不需要的条目。 正确的输出应该是彼得。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

好吧,我没有看到任何exposed=true条款。

您正在遍历阵列并搜索name键,如果找到它,则将其推送到阵列。您缺少额外的if (exposed == true)..

只有逻辑才能获得所有条目的数组。