Как определить первую и последнюю итерацию в цикле foreach?

Если вы используете Arch Linux , вы можете установить пакет rename из AUR , который предоставляет команду renamexm как /usr/bin/renamexm ] и его страницу manual вместе с ней.

Это действительно мощный инструмент для быстрого переименования файлов и каталогов.

Преобразовать в нижний регистр

]

rename -l Developers.mp3 # or --lowcase

Преобразовать в регистр UPPER

rename -u developers.mp3 # or --upcase, long option

Другие опции

-R --recursive # directory and its children

-t --test # dry run, output but don't rename

-o --owner # change file owner as well to user specified

-v --verbose # output what file is renamed and its new name

-s/str/str2 # substite string on pattern

--yes # Confirm all actions

Вы можете выбрать образец Разработчики .mp3 из здесь , если необходимо;)

blockquote>

451
задан Rok Kralj 27 September 2014 в 15:48
поделиться

4 ответа

Вы можете использовать counter:

$i = 0;
$len = count($array);
foreach ($array as $item) {
    if ($i == 0) {
        // first
    } else if ($i == $len - 1) {
        // last
    }
    // …
    $i++;
}
406
ответ дан 22 November 2019 в 22:54
поделиться
foreach ($arquivos as $key => $item) {
   reset($arquivos);
   // FIRST AHEAD
   if ($key === key($arquivos) || $key !== end(array_keys($arquivos)))
       $pdf->cat(null, null, $key);

   // LAST
   if ($key === end(array_keys($arquivos))) {
       $pdf->cat(null, null, $key)
           ->execute();
   }
}
0
ответ дан 22 November 2019 в 22:54
поделиться

1: Почему бы не использовать простой оператор для ? Предполагая, что вы используете реальный массив, а не Iterator , вы можете легко проверить, равна ли переменная счетчика 0 или на единицу меньше всего числа элементов. На мой взгляд, это наиболее чистое и понятное решение ...

$array = array( ... );

$count = count( $array );

for ( $i = 0; $i < $count; $i++ )
{

    $current = $array[ $i ];

    if ( $i == 0 )
    {

        // process first element

    }

    if ( $i == $count - 1 )
    {

        // process last element

    }

}

2: Вам следует рассмотреть возможность использования Nested Sets для хранения вашей древовидной структуры. Кроме того, вы можете улучшить все это, используя рекурсивные функции.

11
ответ дан 22 November 2019 в 22:54
поделиться

Вы можете удалить первый и последний элементы из массива и обработать их отдельно.
Примерно так:

<?php
$array = something();
$first = array_shift($array);
$last = array_pop($array);

// do something with $first
foreach ($array as $item) {
 // do something with $item
}
// do something with $last
?>

Удаление всего форматирования в CSS вместо встроенных тегов улучшит ваш код и ускорит время загрузки.

Вы также можете избежать смешивания HTML с логикой php, когда это возможно.
Страницу можно было бы сделать более читаемой и удобной в обслуживании, разделив такие элементы следующим образом:

<?php
function create_menu($params) {
  //retirive menu items 
  //get collection 
  $collection = get('xxcollection') ;
  foreach($collection as $c) show_collection($c);
}

function show_subcat($val) {
  ?>
    <div class="sub_node" style="display:none">
      <img src="../images/dtree/join.gif" align="absmiddle" style="padding-left:2px;" />
      <a id="'.$val['xsubcatid'].'" href="javascript:void(0)" onclick="getProduct(this , event)" class="sub_node_links"  >
        <?php echo $val['xsubcatname']; ?>
      </a>
    </div>
  <?php
}

function show_cat($item) {
  ?>
    <div class="node" >
      <img src="../images/dtree/plus.gif" align="absmiddle" class="node_item" id="plus" />
      <img src="../images/dtree/folder.gif" align="absmiddle" id="folder">
      <?php echo $item['xcatname']; ?>
      <?php 
        $subcat = get_where('xxsubcategory' , array('xcatid'=>$item['xcatid'])) ;
        foreach($subcat as $val) show_subcat($val);
      ?>
    </div>
  <?php
}

function show_collection($c) {
  ?>
    <div class="parent" style="direction:rtl">
      <img src="../images/dtree/minus.gif" align="absmiddle" class="parent_item" id="minus" />
      <img src="../images/dtree/base.gif" align="absmiddle" id="base">
      <?php echo $c['xcollectionname']; ?>
      <?php
        //get categories 
        $cat = get_where('xxcategory' , array('xcollectionid'=>$c['xcollectionid']));
        foreach($cat as $item) show_cat($item);
      ?>
    </div>
  <?php
}
?>
35
ответ дан 22 November 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: