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

Форум PHP

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

 

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

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

тема: Как можно вывести элементы массива вне цикла, если каждый элемент истино условию?
 
 автор: Wita1y   (17.09.2006 в 21:30)   письмо автору
 
 


<?php
$b 
= array(33343536);
for(
$a 0$a count($b); $a++)
{
   if(
$b[$a]>30 && $b[$a]<40)
   {
      echo (
$b[$a]."&nbsp");
   }
      else
   {
      echo 
" ";
   }
}
?>

Результат: 33 34 35 36

Вместо этого:
echo ($b[$a]."&nbsp");

Подставлю это:
$result = ($b[$a]);

И вывод сделаю в таблице.
Пример:

<table>
<tr>
<td><?php echo (substr($result0)); ?></td>
</tr>
</table>

Результат: 36

Из-за того что вывод сделали вне цикла выходит одно значение и последнее.
А как сделать чтобы все числа отображались в браузере если все числа истино условию?

   
 
 автор: kasmanaft   (17.09.2006 в 23:36)   письмо автору
 
   для: Wita1y   (17.09.2006 в 21:30)
 

Выводить в цикле или $result сделать массивом, т.е.

$result[] = ($b[$a]);

а потом опять в цикле выводить :)

   
 
 автор: EXP   (18.09.2006 в 02:35)   письмо автору
 
   для: kasmanaft   (17.09.2006 в 23:36)
 

А нельзя такое вывести функцией implode() ? Видел где-то в примерах

   
 
 автор: Wita1y   (18.09.2006 в 08:07)   письмо автору
 
   для: kasmanaft   (17.09.2006 в 23:36)
 

Я мог бы так сделать:
<?php 
$b 
= array(33343536); 
for(
$a 0$a count($b); $a++) 

   if(
$b[$a]>30 && $b[$a]<40
   { 
      
//echo ($b[$a]."&nbsp"); 
   

   else 
   { 
      echo 
" "
   } 
}
?>

А в таблицу вставить цикл:
<table><tr><td>
<?php
for($a=0;$a<count($b);$a++)
{
echo 
$b[$a]."&nbsp";
}
?>
</td></tr></table>

Результат: 33 34 35 36

Каждый раз когда я захочу сделать вывод элементов из массива придется ставить цикл? Нет... так же не правильно!
Может есть такая функция которая упростит задачу?

   
 
 автор: kasmanaft   (18.09.2006 в 09:28)   письмо автору
 
   для: Wita1y   (18.09.2006 в 08:07)
 

мне казалось, что вы хотите в разные строки таблицы результат записывать, тогда бы нужен был цикл ...
а если в одну строчку, то можно сделать так:

<?
$b 
= array(33343536);
for(
$a 0$a count($b); $a++)
{
   if(
$b[$a]>30 && $b[$a]<40)
      
$result[] = $b[$a];
}
$result implode (' '$result);
echo 
"<table><tr><td>$result</td></tr></table>";
?>

   
 
 автор: Wita1y   (18.09.2006 в 10:19)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 09:28)
 

>мне казалось, что вы хотите в разные строки таблицы результат записывать, тогда бы нужен был цикл ...

Мне как раз таки нужно в разные строки! Точнее в ячейки таблицы. :)

Есть таблица. В каждую ячейку я буду вставлять значение которое истинно условию.
Я там только одно условие показал, а будет несколько. Вот.

К примеру:

<?php
$b 
= array(2941531333424471758536); 
for(
$a 0$a count($b); $a++)
{
   if(
$b[$a]>&& $b[$a]<20)
   {
      
$result[0]=$a[$b]; // result[0]=мне только поставить на соответствующие ячейки
   
}
   elseif(
$b[$a]>20 && $b[$a]<40)
   {
      
$result[1]=$a[$b];
   }
   elseif(
$b[$a]>40 && $b[$a]<60)
   {
      
$result[2]=$a[$b];
   }
}
?>

В таблице должно отобразиться так:

------------------------
| 0-20 | 20-40 | 40-60 |
|------+-------+-------|
|  13  |   29  |   41  |
|   4  |   33  |   53  |
|  17  |   24  |   47  |
|   5  |   36  |   58  |
------------------------

   
 
 автор: EXP   (18.09.2006 в 13:17)   письмо автору
 
   для: Wita1y   (18.09.2006 в 10:19)
 

Помоему условие надо сделать elseif($b[$a]>=20 && $b[$a]<40) { $result[1]= $a[$b]; } чтобы не пропускать круглые числа. И можно перед таблицей сделать $r1[]=$result[0]; $r2[]=$result[1]; $r3[]=$result[2]; ... И в таблице echo implode(" ", $r1); ... echo implode(" ", $r2); .....

   
 
 автор: Wita1y   (18.09.2006 в 14:58)   письмо автору
 
   для: EXP   (18.09.2006 в 13:17)
 

>Помоему условие надо сделать elseif($b[$a]>=20 && $b[$a]<40) { $result[1]= $a[$b]; }
>чтобы не пропускать круглые числа.
Это ни к чему. :-)

>И можно перед таблицей сделать $r1[]=$result[0]; $r2[]=$result[1]; $r3[]=$result[2]; ... И в таблице echo implode(" ", $r1); ... echo implode(" ", $r2); .....

Сделал и работает, но при этом нужно будет каждый раз писать функцию implode(). Что мне конечно хотелось бы ограничиться echo $...;

Функция implode() работает на прямую с данными. Если нет данных то выдает ошибку.
Warning: implode() [function.implode]: Bad arguments. in ...\test.php on line 93

Допустим что я хочу только еще вести в форму значение и передать методом $_POST или $_GET но еще не ввел, а implode() уже выдает ошибку. Вот из-за этого я не хотел использовать implode(). В принципе можно условие поставить, но это еще чуть лишнего кода, когда и без того хватает.

У кого еще кaкие предложения?

   
 
 автор: kasmanaft   (18.09.2006 в 14:59)   письмо автору
 
   для: Wita1y   (18.09.2006 в 10:19)
 

Можно так сделать:

<?php
$b 
= array(2941531333424471758536);
for(
$a 0$a count($b); $a++)
{
   if(
$b[$a]>&& $b[$a]<20)
   {
      
$result[0][]=$b[$a];
   }
   elseif(
$b[$a]>20 && $b[$a]<40)
   {
      
$result[1][]=$b[$a];
   }
   elseif(
$b[$a]>40 && $b[$a]<60)
   {
      
$result[2][]=$b[$a];
   }
}
$first implode ('<br>'$result[0]);
$second implode ('<br>'$result[1]);
$third implode ('<br>'$result[2]);
echo 
"<table border=1>
      <tr><td>0-20</td><td>20-40</td><td>40-60</td></tr>
      <tr><td>
$first</td><td>$second</td><td>$third</td></tr>
      </table>"
;
?>

Если надо, подправить условия еще, как говорил EXP

   
 
 автор: Wita1y   (18.09.2006 в 15:14)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 14:59)
 

И этот вариант тоже хорош, но только если массив нам известен. :-)

Прошу прощения.
Мне надо было заранее сказать что массив будет заполняться методом $_POST или $_GET.
А то уже замучал тут некоторых. :-/

   
 
 автор: kasmanaft   (18.09.2006 в 15:38)   письмо автору
 
   для: Wita1y   (18.09.2006 в 15:14)
 

Ну нужно заполнить массив и он тоже будет известен :)

   
 
 автор: Wita1y   (18.09.2006 в 15:40)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 15:38)
 

Это понятно что будет известен.
А если страница только загрузилась, что тогда, во все ячейки заполнять ошибки!? :-)))

   
 
 автор: kasmanaft   (18.09.2006 в 16:02)   письмо автору
 
   для: Wita1y   (18.09.2006 в 15:40)
 

Нет, можно проверить сначала, пустой массив или нет .. несколько строк ничего не испортит ... да и в любом случае, всё лучше проверять ...

if (count($result[0]) > 0)
    $first = implode ('<br>', $result[0]);
else $first = 'таких нет';

ну и
if (count($b) > 0)
    for($a = 0; $a < count($b); $a++)

   
 
 автор: Wita1y   (18.09.2006 в 17:06)   письмо автору
 
   для: kasmanaft   (18.09.2006 в 16:02)
 

Вместо условия стоит @ перед каждой переменной, чтоб не выдавал ошибку.
Я её поставил потому что все остальное работает. :-)))

   
Rambler's Top100
вверх

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