Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать, чтобы на последней записи не было <br>
 
 автор: kireyev   (31.03.2008 в 14:38)   письмо автору
 
 

Есть массив:
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> ???

   
 
 автор: mihdan   (31.03.2008 в 17:45)   письмо автору
 
   для: kireyev   (31.03.2008 в 14:38)
 

<?
if (next($k)) echo '<br>';
?>


Не советовал я бы вам использовать mysql_query() в цикле. Лучше в теле цикла сформировать переменную, а по завершению сего выполнить запрос из этой переменной

   
 
 автор: Atheist   (31.03.2008 в 17:50)   письмо автору
 
   для: mihdan   (31.03.2008 в 17:45)
 

> if (next($k)) echo '<br>';
Неправильно

[поправлено модератором]

   
 
 автор: mihdan   (31.03.2008 в 17:55)   письмо автору
 
   для: Atheist   (31.03.2008 в 17:50)
 

Спасибо. Поправил. Просто ошибка paste\copy


<?
if (next($array_equipments)) echo '<br />';
?>

   
 
 автор: Atheist   (31.03.2008 в 18:17)   письмо автору
 
   для: mihdan   (31.03.2008 в 17:55)
 

Между прочим, код будет работать неправильно.

   
 
 автор: mihdan   (31.03.2008 в 18:31)   письмо автору
 
   для: Atheist   (31.03.2008 в 18:17)
 

Эт почему же?

   
 
 автор: Atheist   (31.03.2008 в 18:37)   письмо автору
 
   для: 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 />';
}
?>

   
 
 автор: kireyev   (31.03.2008 в 22:49)   письмо автору
 
   для: mihdan   (31.03.2008 в 17:55)
 

Отлично, работает, спасибо mihdan.

   
 
 автор: Atheist   (31.03.2008 в 22:56)   письмо автору
 
   для: kireyev   (31.03.2008 в 22:49)
 

Так-с. kireyev, у тебя первая запись выводится? То есть с id, который записан в первом элементе $array_equipments.

   
 
 автор: mihdan   (01.04.2008 в 00:45)   письмо автору
 
   для: Atheist   (31.03.2008 в 22:56)
 

Atheist, у меня работает! Потестил на разных серверах под РНР4 и РНР5

   
 
 автор: Atheist   (01.04.2008 в 00:52)   письмо автору
 
   для: mihdan   (01.04.2008 в 00:45)
 

Какой результат?

   
 
 автор: Хулиган   (01.04.2008 в 13:48)   письмо автору
 
   для: 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);
?>

   
 
 автор: Atheist   (01.04.2008 в 16:05)   письмо автору
 
   для: 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". И так далее. То есть первый элемент теряется.

   
 
 автор: Drago   (01.04.2008 в 16:11)   письмо автору
 
   для: Atheist   (01.04.2008 в 16:05)
 

У меня такой результат:

string(1) "a" string(1) "b" 
string(1) "b" string(1) "c" 
string(1) "c" bool(false) 

Да и с чего бы ему быть другим? foreach, вроде как сбрасывает указатель массива в начало, затем создает его копию и работает с ним.
Неправильный у вас какой-то результат.

   
 
 автор: Atheist   (01.04.2008 в 16:14)   письмо автору
 
   для: Drago   (01.04.2008 в 16:11)
 

Интересно. Какая у тебя версия PHP? У меня 5.2.5 (это последняя версия).

   
 
 автор: Drago   (01.04.2008 в 16:19)   письмо автору
 
   для: Atheist   (01.04.2008 в 16:14)
 

У меня PHP 4.4.4. Версия не последняя, но меня устраивает.

   
 
 автор: Atheist   (01.04.2008 в 16:20)   письмо автору
 
   для: Drago   (01.04.2008 в 16:19)
 

Возможно, что-то изменили в поведении foreach.

   
 
 автор: Drago   (01.04.2008 в 16:24)   письмо автору
 
   для: Atheist   (01.04.2008 в 16:20)
 

Да, похоже на то. Так как на версии 5.2.4, выводит без первого элемента.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования