Найти последний элемент ассоциативного массива

Royal Flash

-=MaestrO=-
Найти последний элемент ассоциативного массива

Вот такой вопрос: есть ассоциативный массив: $array = array(str1 => ab, str2 => sd, str3 => q) Его читаем при помощи while:
PHP:
while ($element = each($array))
  {
  $str = $str.$element['key'].' =  '.$element['value'].', ';
  }
Как узнать, что в цикле последний элемент массива? Необходимо для того, чтобы в конце, вместо запятой, поставить точку.
 

Royal Flash

-=MaestrO=-
svetasmirnova
Как? explode()? Много лишнего кода, проще переписать цикл с помощью for(), count(array), и последний элемент заменить. Неужели нет решения попроще?
В работе с массивами я еще не преуспел...
 

svetasmirnova

маленький монстрик
Зачем тебе массивы чтобы заменить элемент в строке?

Кстати почитай в мане почему foreach предпочтительнее while(each(...))
 

Royal Flash

-=MaestrO=-
svetasmirnova
В массиве лежат исходные данные, их нужно оформить перед выводом. Про foreach прочитаю, раньше о нем вообще ничего не слышал :) Спасибо и на этом.
 

Sancho

Новичок
Проверяешь в начале цикла строку $str. Если она не пустая, то добавляешь в конец запятую
 

SunDrop

Помощник поисков. робота
PHP:
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(", ", $array);
$comma_separated .= '.';
 

master_x

Pitavale XXI wieku
SunDrop
вернее это совсем не то, что ему нужно... если бы все было так просто.
 

TheBattle

Новичок
Если я правильно понял:
1 способ (с помощью count):
PHP:
 $ct = count($mas);
$counter = 0;
foreach ($mas as $key => $value) {
 $str = ($counter == $ct) ? $str."." : ",";
 ++$counter;
}
Так как этот способ крайне нерациональный, то предлагаю более простой:
PHP:
$len = strlen($str);
$new_str = substr($str, 0, $len - 1); // новая строка содержит всё, кроме последней запятой;
$new_str .= '.';
 

Andreika

"PHP for nubies" reader
Кром
почему не то?
PHP:
foreach ($array as $key=>$value) 
{ 
  $strs[] = $key.' =  '.$value; 
}
$str = implode(', ',$strs).'.';
 

SiMM

Новичок
TheBattle, неправильно понял, садись, два.
В общем случае (как и в этом) элемента с индексом $ct в массиве может и не быть вовсе. В нём вообще может не быть элементов с числовыми индексами.
 

TheBattle

Новичок
Автор оригинала: SiMM
TheBattle, неправильно понял, садись, два.
Садись, кол. Ты код не понял, в первом случае перебираются не индексы, а просто элементы массива. Даже если он неправильный, то тут лучше использовать второй случай.
 

Фанат

oncle terrible
Команда форума
TheBattle
почитай синтаксис substr
узнаешь много нового.
 

SiMM

Новичок
> Садись, кол. Ты код не понял, в первом случае перебираются не индексы, а просто элементы массива.
Да, ошибся. Но несмотря на это код всё равно нерабочий, ибо в приведённом коде $counter == $ct никогда не даст true ;)
 

TheBattle

Новичок
Фанат
Вот вырезка из переведённого мануала:
substr
(PHP 3, PHP 4)
substr - возвращает часть строки.
Описание
string substr (string string, int start [, int length])
Substr возвращает часть строки string, специфицированную параметрами start и length.
Если start положительный, возвращаемая строка начинается со start'овой позиции в string, отсчитываемой от нуля. Например, в строке 'abcdef' символ в позиции 0 это 'a', символ в позиции 2 это 'c', и так далее.

И где же я ошибся? (специально для тебя, Фанат, проверил данный мной код - работает правильно).

SiMM Ты первый ошибся... А я дал код для размышлений, я думаю, не составит труда додуматься, что $ct = count($mas) - 1;
 

SiMM

Новичок
> И где же я ошибся?
Разве здесь говорится об ошибке?
> узнаешь много нового
Если length отрицательный, то будет отброшено указанное этим аргументом число символов с конца строки string . Если при этом позиция начала подстроки, определяемая аргументом start , находится в отброшенной части строки, возвращается пустая строка.
> А я дал код для размышлений
А не надо приводить в форуме код, который не работает. Только и всего. А идею вполне можно и словами описать - этого в данном случае должно быть вполне достаточно.
 

Кром

Новичок
Andreika ты о чем?

svetasmirnova народе никак не может опредилиться, подходил ли php для решение таких проблем или надо все таки юзать java. :)
 
Сверху