如何获取数组中所请求项的键?

时间:2011-07-24 11:24:40

标签: php multidimensional-array key

这是我用来查找数组中所请求项的键的方法,

$items = array
(
    '0' => array
        (
            'mnu_id' => '1',
            'pg_url' => 'home'
        ),

    '1' => array
        (
            'mnu_id' => '5',
            'pg_url' => 'about'
        ),

     '2' => array
        (
            'mnu_id' => '6',
            'pg_url' => 'venues'
        )

);

所以,如果我要求'场地'的价值,

while ($current = current($items)) 
{
    if ($current['pg_url'] == 'venues') {
        $current_key = key($items);
    }
    next($items);
}

echo $current_key;

我得到的密钥是2。

我真的不喜欢这种方法,因为它有点冗长而且在使用while()循环数组时让我感到困惑。我不明白为什么我也必须在代码中使用next()

我想知道是否有更好的方法来获取密钥?

2 个答案:

答案 0 :(得分:1)

foreach (array_keys($items) as $key) {
  if ($items[$key]['pg_url'] == 'venues') {
    $current_key = $key;
    // optionally use a break here to escape the loop
  }
}

答案 1 :(得分:0)

也许这更容易理解:

$current_key = -1;
foreach($items as $key => $item) {
  if($item['pg_url'] == 'venues') {
    $current_key = $key;
  }
}

我不知道,你到底想要做什么,但似乎你想根据pg_url从数组中检索信息...如果是这样的话,也许将pg_url设置为关键会更好:

$items = array
(
    'home' => array
        (
            'mnu_id' => '1'
        ),

    'about' => array
        (
            'mnu_id' => '5'
        ),

    'venues' => array
        (
            'mnu_id' => '6'
        )

);

然后你可以简单地检查

if(isset($items['venues'])) ...