2011-12-15 83 views
0

在下面的yaml文本中檢索兒童的名字哪裏暴露的是真的如何根據條件提取Yaml的特定部分?

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

電流輸出

凱西 彼得

在上面的輸出,卡西是不需要的條目。 正確的輸出應該是彼得。

感謝提前:)

回答

0

嗯,我沒有看到任何地方exposed=true條款。

你走在陣列並搜索name關鍵,如果你找到它,你把它推到一個數組。你缺少一個額外的if (exposed == true)..

你會得到所有條目的數組這是合乎邏輯的。

相關問題