|
|
|
| Есть массив:
foreach($array_equipments as $k=>$v){
$equipment = mysql_fetch_array(mysql_query("SELECT * FROM equipment WHERE id='$v';"));
echo $equipment['name'];
echo "<br>";
}
Как сделать, чтобы после последнего значения $equipment['name'] не ставился <br> ??? | |
|
|
|
|
|
|
|
для: kireyev
(31.03.2008 в 14:38)
| |
<?
if (next($k)) echo '<br>';
?>
|
Не советовал я бы вам использовать mysql_query() в цикле. Лучше в теле цикла сформировать переменную, а по завершению сего выполнить запрос из этой переменной | |
|
|
|
|
|
|
|
для: mihdan
(31.03.2008 в 17:45)
| | > if (next($k)) echo '<br>';
Неправильно
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Atheist
(31.03.2008 в 17:50)
| | Спасибо. Поправил. Просто ошибка paste\copy
<?
if (next($array_equipments)) echo '<br />';
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(31.03.2008 в 17:55)
| | Между прочим, код будет работать неправильно. | |
|
|
|
|
|
|
|
для: Atheist
(31.03.2008 в 18:17)
| | Эт почему же? | |
|
|
|
|
|
|
|
для: mihdan
(31.03.2008 в 18:31)
| | > Эт почему же?
http://php.net/manual/en/control-structures.foreach.php
Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.
А теперь протестируй:
<?php
$array = array('a', 'b', 'c');
foreach( $array as $k => $v )
{
var_dump(current($array), next($array));
echo '<br />';
}
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(31.03.2008 в 17:55)
| | Отлично, работает, спасибо mihdan. | |
|
|
|
|
|
|
|
для: kireyev
(31.03.2008 в 22:49)
| | Так-с. kireyev, у тебя первая запись выводится? То есть с id, который записан в первом элементе $array_equipments. | |
|
|
|
|
|
|
|
для: Atheist
(31.03.2008 в 22:56)
| | Atheist, у меня работает! Потестил на разных серверах под РНР4 и РНР5 | |
|
|
|
|
|
|
|
для: mihdan
(01.04.2008 в 00:45)
| | Какой результат? | |
|
|
|
|
|
|
|
для: Atheist
(01.04.2008 в 00:52)
| |
<?
$output = array();
foreach($array_equipments as $k=>$v){
$equipment = mysql_fetch_array(mysql_query("SELECT * FROM equipment WHERE id='$v';"));
$output[] = $equipment['name'];
}
echo implode("<br>",$output);
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(01.04.2008 в 00:45)
| | > Atheist, у меня работает!
> Какой результат?
Ну и какой результат-то, а? Мой:
> string(1) "b" string(1) "c"
> string(1) "c" bool(false)
> bool(false) bool(false)
И это "работает"? current($array) в первой же итерации показывает "b", а не "a". И так далее. То есть первый элемент теряется. | |
|
|
|
|
|
|
|
для: Atheist
(01.04.2008 в 16:05)
| | У меня такой результат:
string(1) "a" string(1) "b"
string(1) "b" string(1) "c"
string(1) "c" bool(false)
|
Да и с чего бы ему быть другим? foreach, вроде как сбрасывает указатель массива в начало, затем создает его копию и работает с ним.
Неправильный у вас какой-то результат. | |
|
|
|
|
|
|
|
для: Drago
(01.04.2008 в 16:11)
| | Интересно. Какая у тебя версия PHP? У меня 5.2.5 (это последняя версия). | |
|
|
|
|
|
|
|
для: Atheist
(01.04.2008 в 16:14)
| | У меня PHP 4.4.4. Версия не последняя, но меня устраивает. | |
|
|
|
|
|
|
|
для: Drago
(01.04.2008 в 16:19)
| | Возможно, что-то изменили в поведении foreach. | |
|
|
|
|
|
|
|
для: Atheist
(01.04.2008 в 16:20)
| | Да, похоже на то. Так как на версии 5.2.4, выводит без первого элемента. | |
|
|
|