返回key包含此字符串的值

时间:2011-01-18 10:48:41

标签: php arrays key

我有一个这样的数组:

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

我知道名字(即根,级别和ID),但我不知道密钥的数字部分。

我需要一个函数,它可以返回数组中包含给定名称的任何部分。

干杯

4 个答案:

答案 0 :(得分:3)

你去吧

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

答案 1 :(得分:0)

$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;

答案 2 :(得分:0)

您可以使用array_search执行此操作!

答案 3 :(得分:0)

这应该做你需要的。

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