2011-12-15 7 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 

期待される出力

ピーター

CURRENT CODE

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

CURRENT OUTPUT

キャシー上記出力ピーター

、キャシーは、不要なエントリです。 正しい出力はPeterです。事前に

感謝:)

答えて

0

さて私はどこでもexposed=true句が表示されません。

nameのキーを探していたら、それを配列に移動して配列にプッシュします。あなたは追加がありません。if (exposed == true)..

すべてのエントリの配列を取得することは論理的です。

関連する問題