2011-07-24 75 views
1

這是我用它來找到一個陣列中的所需項的關鍵方法,如何獲取數組中的請求項的密鑰?

$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()

我想知道是否有更好的方法來獲得鑰匙?

+1

您必須使用next(),因爲它提前了數組指針。請在PHP手冊中查找current/next/key。 – Gordon

回答

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'])) ... 
+0

非常感謝! – laukok

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 
    } 
} 
+0

感謝Bob和Gordon! – laukok