Определить последнюю итерацию

Crys

Двинутый новичок
да это всё понятно, спасибо, просто перед тем как делать велосипед, надо было убедиться что php таких возможностей не предоставляет.
Если бы php предоставлял такие возможности, то не было причин использовать смарти и прочие .........

А возможности php можно всегда посмотреть на http://php.net/

-~{}~ 01.09.10 01:53:

Не... я все-таки фигею. Говорите, что "в смарти это решается одним мизинцем, а в пхп через жопу". Но то, что в смарти - более ста килобайт кода в архиве для реализации все плюшек и фигнюшек - на это внимание никто не обращает. Напишите столько кода-оберток на pure-php, получите в результате симфони/зф/итд/... А вот ПОТОМ сравнивайте костыли смарти с костылями php. А шаблоны на ассемблере еще хуже могут выглядеть, чем шаблоны на php...

-~{}~ 01.09.10 01:57:

Во поперло меня )))

Добавлю.. Мне лично пофиг, на чем реализованы шаблоны - pure-php, smarty, xslt. Я только против нестандартного никому_неизвестного_кроме_пропавшего_разработчика_говно_шаблонизатора.
 

p0is0n

Новичок
PHP:
$tags = array("1", "2", "3", "4");

$last = array_pop($tags);

foreach ($tags as $tag) {
	echo $tag . ",";
}

echo $last;
 

iceman

говнокодер
исползовать current(), next()? для определения, вроде как то так я делал, уже не помню...
 

trashcan

Новичок
Автор оригинала: iceman
исползовать current(), next()? для определения, вроде как то так я делал, уже не помню...
я тоже так делал, только на версии php 5.3 (на winxp у меня и на ubuntu у коллеги), почему то все работает не так, как указано в документации
я точно помню, что в предыдущих версиях foreach не изменял внутренний указатель массива и можно было сделать так:

PHP:
reset($tags);  
foreach ($tags as $value) {
  if (next($tags) === FALSE) {
  echo "Последний: ".$value;
  }
}
если руководствоваться документацией и поверить , что
On each loop, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next loop, you'll be looking at the next element).
то можно было бы сделать так

PHP:
foreach ($tags as $value) {
  if (next($tags) === FALSE) {
  echo "Последний: ".$value;
  }
  prev($tags);
}
Однако, как ни странно, на данный момент вот такой код
PHP:
echo "First Time:\n";
$test = array(0, 1, 2, 3);

foreach ($test as $value) {

    echo key($test)."=";
    echo current($test)."\n";
}

echo "Second Time:\n";
foreach ($test as $value) {

    echo key($test)."=>";
    echo current($test)."\n";
}
выводит вот такой результат:
PHP:
First Time:
1=>1
1=>1
1=>1
1=>1
Second Time:
1=>1
1=>1
1=>1
1=>1
т.е. фактически foreach не увеличивает указатель, как сказано в документации, и мало того вместо того, чтобы
When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array.
сбрасывает указатель не на первый элемент массива, а на второй

в общем можно конечно извратиться и написать что-то вроде этого
PHP:
$test = array(0, 1, 2, 3,4);

$start = true;
foreach ($test as $key => $value) {
    if ($start) {
        reset($test);
        $start = false;
    }

    if (next($test) === FALSE) {
        echo "Последний: ".$value;
    }
}
по крайней мере это работает на моей версии, а вообще похоже налицо имеет место быть бага
 
Сверху