Как извлечь конкретную часть Yaml в зависимости от состояния? - PullRequest
0 голосов
/ 15 декабря 2011

В следующем тексте yaml для получения имен детей , где выставлено значение 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);
}

ТЕКУЩИЙ ВЫХОД

Кэти Питер

В приведенном выше выводе Кэти является нежелательной записью.Правильный вывод должен быть Питер.

Заранее спасибо:)

1 Ответ

0 голосов
/ 15 декабря 2011

Ну, я нигде не вижу exposed=true предложения.

Вы просматриваете массив и ищете ключ name, если вы его нашли, вы помещаете его в массив.Вам не хватает дополнительных if (exposed == true)..

Логично, что вы получите массив всех записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...