Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > foreach с заданым количеством итераций


Автор: DenWPF 4.3.2011, 13:41
у меня есть цикл foreach в массиве 5 элементов, мне нужно что foreach  отработал 6 раз. Можно как то сделать?
или проще for ?

Автор: Shogun 4.3.2011, 13:49
Конечно for, + он работает в 2 раза быстрее foreach.

Автор: BuShaRt 4.3.2011, 15:50
Вообще, очень странно, как вы собираетесь по 5-ти элементам сделать 6-шагов. Мистика в программирование?

По сути: если нужен гибкий контроль за циклом, то только FOR.

Автор: DenWPF 4.3.2011, 17:46
вообще я использую это в генерации html.

Код

    <?php foreach($posts as $key => $value):?>
    <li>
        <a href="<?php echo $key;?>" class="<?php echo ($key == $current_page ? 'current' : '')?>">
            <?php echo $value;?>
        </a>
    </li>
    <?php endforeach;?>



это само php ? или это во фреймворке в котором пишу?

Автор: Muerto 4.3.2011, 18:22
DenWPF Это php смешанный с html

endforeach; кстати редко вижу не в шаблонизаторе

Автор: BuShaRt 4.3.2011, 18:23
Я бы вам посоветовал не браться за "фреймворки", если Вас они так путают. 

Автор: ksnk 4.3.2011, 18:32
Цитата(DenWPF @  4.3.2011,  13:41 Найти цитируемый пост)
массиве 5 элементов, мне нужно что foreach  отработал 6 раз


Цитата(DenWPF @  4.3.2011,  17:46 Найти цитируемый пост)
<?php foreach($posts as $key => $value):?>


а что должно получится-то в конце? Из 5-и элементов массива 6 ссылок как сделать?


Автор: HnH 4.3.2011, 18:43
Вообще foreach лучше использовать когда идентификаторы полей в массиве идут не по порядку, или вообще буквенные ([1]=>'asd',[15]=>'asd2',[iddqd]=>'asd3';) Во всех остальных случаях используйте for, он и быстрее и более гибок.

Автор: DenWPF 5.3.2011, 01:53
мне это нужно что бы создать 6 ячеек, в 5 из них будет картинка а 6 не будет...

вот как это сделать с php + html?

Автор: ksnk 5.3.2011, 08:27
Цитата(DenWPF @  5.3.2011,  01:53 Найти цитируемый пост)
5 из них будет картинка а 6 не будет

И кто мешает добавить строчку "без картинки" сразу после цикла?

Автор: DenWPF 5.3.2011, 11:02
по тому что я же не знаю, будет не хватать одной или 2 картинки...

я конечно могу считать в цикле, но это не красиво.

Автор: ksnk 5.3.2011, 11:46
Цитата(DenWPF @  5.3.2011,  11:02 Найти цитируемый пост)
я конечно могу считать в цикле, но это не красиво. 

Это про что? Про то, что нужно определить четное количество элементов или нет?
count непоможет?

Автор: DenWPF 5.3.2011, 17:46
Ну в foreach я смогу ввести переменную count а потом проверять сколько не хватает.

Автор: ksnk 5.3.2011, 17:52
Я про то, что count от массива даст количество элементов в массиве. Если нужно вычислить четно оно или нет - есть оператор & 1 Так что если нужно какую табличку умным образом заполнить, то все вполне решаемо без дополнительных переменных и счетчиков...

Автор: Shogun 5.3.2011, 20:42
Охохох...

Код

$i =0;

foreach ($posts as $k=>$v)
  {
    echo '<li>', $k, '-', $v, '</li>';

    $i++;
  }

if ($i<6)
  {
    for($i; $i<6; $i++)
      {
        echo '<li>...</li>';
      }
  }


что-то такое... или так:

Код

  for($i=0; $i<6; $i++)
    {
      if (isset($posts[$i]))
        {
          list($k, $v) = $posts[$i];
          echo '<li>', $k, '-', $v, '</li>';
        } 
      else
         {
            echo '<li>...</li>';
         }
    }


вариантов много... вроде это Вам нужно как я понял

Автор: DenWPF 6.3.2011, 00:35
да так я мог. мне бы что бы вид был

Код

    <?php foreach($posts as $key => $value):?>
    <li>
        <a href="<?php echo $key;?>" class="<?php echo ($key == $current_page ? 'current' : '')?>">
            <?php echo $value;?>
        </a>
    </li>
    <?php endforeach;?>

Автор: ksnk 6.3.2011, 08:56
Код

 <?php 

foreach(array_merge($post,array('','')) as $key => $value):?>
...

с каким количествм пустых элементов merge'ить - вычислять предварительно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)