2012-05-10 2 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

Правильно ли этот код? Потому что мне кажется, что вы переписываете свой массив $ sidebar при переходе по массиву с именем '$ single'? – Madbreaks

+0

@madbreaks вы правы, кроме '$ 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 ($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 или другой цикл с помощью счетчика - это действительно единственный способ сделать то, что вы просили.

Смежные вопросы