2012-05-10 39 views
0

說我有類似於下面,我通過它循環這樣一個數組:獲取PHP中的數組項目的位置

$sidebar = array("Best of the Month" => $featuredBestMonth, 
       "Featured Content" => $featuredContent); 

<? while($item = current($sidebar)):?> 
    <? if($item):?> 

     <h3><?=key($sidebar);?></h3> 

     <? foreach($item as $single):?> 
      <p><?=$single['title'];?></p> 
     <? endforeach;?> 

    <? endif;?> 
    <? next($sidebar);?> 
<? endwhile;?> 

我怎麼能指望目前的序列號,所以第一同時顯示1,第二個顯示2?

我知道我可以用$i++;來做,但只是想知道是否有一個數組函數來做到這一點?

不知道我是否可以在foreach循環中使用鍵?

+1

我會使用'foreach'循環+計數器。你可以在這裏找到一個數組函數列表:http://php.net/manual/en/ref.array.php –

+0

該代碼是否正確?因爲它在我看來像是在循環遍歷一個名爲'$ single'的數組時覆蓋了$ sidebar數組? – Madbreaks

+0

@madbreaks you right,除了'$ item'沒有填滿任何地方... :( –

回答

0

Oi - 所有這些標籤(和短標籤)都很痛苦。感覺很像PHP 4,任何被迫支持這個代碼的人都不會很高興。沒有進攻意圖,但我可以建議是這樣:

$i = 0; 

$sidebar = array(
    "Best of the Month" => $featuredBestMonth, 
    "Featured Content" => $featuredContent 
); 

foreach($sidebar as $key => $item){ 
    if($item){ // will $item ever NOT evaluate to true? 
     echo "<h3>".++$i.". $key</h3>"; 

     foreach($item as $single){ 
      echo "<p>$single[title]</p>"; 
     } 
    } 
} 

我真不知道該代碼是有道理的,但基於您的例子至少應該產生相同的結果(也不能確定,你希望你的反要顯示,因爲你的問題不是很清楚..所以我猜)。

祝你好運。

+0

這僅僅是模板文件的php,所以當它被全部用在短標籤中時,它更容易看到html。 '$ sidebar'數組是在控制器中創建的。 – Dan

1
array_search(key($sidebar), array_keys($sidebar)); 

嗯..不漂亮。使用for循環? :P

+1

關鍵是一個字符串雖然,而不是數字 –

+0

我明白了。將更新 – Halcyon

0

我建議你使用的foreach幾乎所有的數組循環需求:

foreach ($sidebar as $single) {} 

而對於計數的數組元素只是用count()

count ($sidebar); 

if (is_array($sidebar)) 
foreach ($sidebar as $key => $single) : 
?> 
    <h3><?php echo $key; ?></h3> 
    <p><?php echo $single['title']; ?></p> 
<? 
endforeach; 

最終解決方案:

if (is_array($sidebar)) 
{ 
    $i = 0; 
    foreach ($sidebar as $key => $item) 
    { 
     $i2 = ++ $i; 
     echo "<h3>{$i2}.- $key</h3>\n"; 

     if (is_array($item)) 
     { 
      $j = 0; 
      foreach ($item as $single) 
      { 
       $j2 = ++ $j; 
       echo "<p>{$j2}.- {$single['title']}</p>"; 
      }; 
     } 
    } 
} 
+0

如果我使用foreach,我還能得到關鍵嗎? – Dan

+0

是的,一會兒... –

+0

'foreach($ sidebar as $ key => $ single){...' – Madbreaks

0

我不相信有一種方法可以用字符串索引(而不是使用單獨的計數器變量進行分析)進行詢問。一個for循環或另一個循環與計數器是真正實現你所要求的唯一方法。