возвращать значения, где ключ содержит эту строку - PullRequest
2 голосов
/ 18 января 2011

У меня есть такой массив:

array(
    [root_1] => array(
        [level_1] => array(
            [id_1] => array(
                [foo] = bar
            )
        )
    )
)

Где я знаю имена (т.е. root, level и id), но я не знаю числовую часть ключа.

Мне нужна функция, которая может вернуть любые части массива, где ключ содержит заданное имя.

Cheers

Ответы [ 4 ]

3 голосов
/ 18 января 2011

Вот, пожалуйста,

function search_incomplete ($needle, $haystack)
{
    foreach (new RecursiveIteratorIterator (new RecursiveArrayIterator ($haystack), RecursiveIteratorIterator::SELF_FIRST) as $key => $value)
    {
        if (strpos ($key, $needle) === 0)
        {
            return $value;
        }
    }
}

$array = array (
    'root_1'    => array (
        'level_1'   => array (
            'foo'   => 'bar',
        ),
    ),
);


var_dump (search_incomplete ('level', $array));
var_dump (search_incomplete ('root', $array));
var_dump (search_incomplete ('foo', $array));
0 голосов
/ 02 июля 2012

Это должно делать то, что вам нужно.

function preg_grep_keys( $pattern, $input, $flags = 0 )
{
    $keys = preg_grep( $pattern, array_keys( $input ), $flags );
    $vals = array();
    foreach ( $keys as $key )
    {
        $vals[$key] = $input[$key];
    }
    return $vals;
}

С ... http://www.php.net/manual/en/function.preg-grep.php#95787

0 голосов
/ 18 января 2011

Вы можете использовать array_search, чтобы сделать это!

0 голосов
/ 18 января 2011
$level = 1;
if (isset($array['root_'.$level]['level_'.$level]['id_'.$level])) {
    return $array['root_'.$level]['level_'.$level]['id_'.$level];
} else {
    // something else
}

Редактировать: Если вы знаете только префиксы клавиш:

$out = array();
foreach ($array as $key1 => $value1)
    if (is_array($value1) && strpos($key1, 'root_') === 0)
        foreach ($value1 as $key2 => $value2)
            if (is_array($value2) && strpos($key2, 'level_') === 0)
                foreach ($value2 as $key3 => $value3)
                    if (strpos($key3, 'id_') === 0)
                        $out[$key1][$key2][$key3] = $value3;
return $out;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...