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

Форум PHP

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

 

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

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

тема: Вывод информации по несколько рядов
 
 автор: Webmaster-X   (28.03.2007 в 17:01)   письмо автору
 
 

Подскажите как вывисти данные с массива в 2 или 3 ряда

Вид массива


<?
$base
=array(

"0"=>"auto_increment::catname::catdesrc::catimage::",
"1"=>"auto_increment::catname::catdesrc::catimage::",
"2"=>"auto_increment::catname::catdesrc::catimage::",
 
// и так дальше...

);
?>

   
 
 автор: bronenos   (28.03.2007 в 17:31)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 17:01)
 

не совсем понял.....

   
 
 автор: Webmaster-X   (28.03.2007 в 17:42)   письмо автору
 
   для: bronenos   (28.03.2007 в 17:31)
 

например:

<? 
$base
=array( 

"0"=>"auto_increment::catname::catdesrc::catimage::"
"1"=>"auto_increment::catname::catdesrc::catimage::"
"2"=>"auto_increment::catname::catdesrc::catimage::"
 
// и так дальше... 

); 

// обрабатываем масмив
for ($i=0$i<count($base); $i++)
{
            list(
$autoincrement_cat,$name_cat,$deskription_cat,$cat_image)=split("::",$base[$i]);

// здесь пишим то что я незнаю как написать
}
?>


на выходе:


категория1                                категория2                                    категория3 
описание1                                  описание 2                                    описание3

   
 
 автор: Webmaster-X   (28.03.2007 в 18:39)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 17:42)
 

Чё никто не знает?

   
 
 автор: Valick   (28.03.2007 в 19:22)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 18:39)
 

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

   
 
 автор: Webmaster-X   (28.03.2007 в 19:31)   письмо автору
 
   для: Valick   (28.03.2007 в 19:22)
 

Я недумаю что это сложно, но я не сталкивался с этим и надеюсь на помощь.

   
 
 автор: LuxeMate   (28.03.2007 в 19:47)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 19:31)
 

То есть нужно чтобы было по 3 столбца на строчку или все столбцы которые получтся в одну строку?

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

   
 
 автор: Webmaster-X   (28.03.2007 в 20:05)   письмо автору
 
   для: LuxeMate   (28.03.2007 в 19:47)
 

Речь идёт о категориях и выводом их по лолонкам а не в ряд или встрочку, к примеру взять любой каталог ссылок

   
 
 автор: Valick   (28.03.2007 в 21:03)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 20:05)
 

Вопрос о происхождении скрипта хоть и риторический, но до сих пор актуален...
Скажите хотябы откуда вы берёте переменные $autoincrement_cat,$name_cat,$deskription_cat,$cat_image и если не трудно обьясните в двух словах что делает строка:
list($autoincrement_cat,$name_cat,$deskription_cat,$cat_image)=split("::",$base[$i]);

   
 
 автор: Trianon   (28.03.2007 в 22:04)   письмо автору
 
   для: Valick   (28.03.2007 в 21:03)
 

эти переменные из этого оператора и берутся. Конструкция list() слева от = рассовывает элементы присваиваемого массива по своим аргументам.
http://php.net/list

   
 
 автор: Valick   (28.03.2007 в 22:51)   письмо автору
 
   для: Trianon   (28.03.2007 в 22:04)
 

Trianon, спасибо ;-)

   
 
 автор: Trianon   (28.03.2007 в 22:02)   письмо автору
 
   для: Webmaster-X   (28.03.2007 в 17:42)
 

прогоните весь цикл по базе дважды - первый раз для строки категорий, второй - для строки описаний.

   
 
 автор: Valick   (28.03.2007 в 22:42)   письмо автору
 
   для: Trianon   (28.03.2007 в 22:02)
 

Эх... не получается у меня с наводящими вопросами... может это вам подойдёт?

<?  
$base
=array(  

"категория1"=>array("описание1","описание2","описание3","описание4",),  
"категория2"=>array("описание1","описание2","описание3","описание4","описание5","описание6",),  
"категория3"=>array("описание1","описание2","описание3","описание4","описание5"),  
 
// и так дальше...  

                       
);  

// обрабатываем массив 
echo "<table><tr>";
foreach    (
$base as $key => $val
    {
    echo 
"<td valign='top'>$key<br>";
    foreach (
$val as $str)
        { 
        echo 
"$str<br>";
        }
    echo 
"</td>";
    }
echo 
"</tr></table>";
?>

   
 
 автор: Webmaster-X   (29.03.2007 в 12:15)   письмо автору
 
   для: Valick   (28.03.2007 в 22:42)
 

Большое спасиба но это не тот результат к которому хотелось бы прийти
У Вас получается


<table>
<tr>
<td valign='top'>категория1<br>описание1</td>
<td valign='top'>категория2<br>описание1</td>
<td valign='top'>категория3<br>описание1</td>
</tr>
</table>


тоесть все категории выводятся в строчку и если их будет 50 получится скролинг в низу

хотелось бы чтоб результат был следующим

<table>
<tr>
<td valign='top'>категория1<br>описание1</td>
<td valign='top'>категория2<br>описание1</td>
<td valign='top'>категория3<br>описание1</td>
</tr>
<tr>
<td valign='top'>категория4<br>описание1</td>
<td valign='top'>категория5<br>описание1</td>
<td valign='top'>категория6<br>описание1</td>
</tr>
</table>

а количество колонок задавалось переменной

   
 
 автор: Webmaster-X   (29.03.2007 в 13:40)   письмо автору
 
   для: Webmaster-X   (29.03.2007 в 12:15)
 

Вот собственно что я хотел зделать

<?
$colonki 
"8";
$num=-1;

echo
"<table border=0>";
  for (
$i=0$i<count($base); $i++)
   {
      list(
$autoinskrement_cat,$name_cat,$deskription_cat,$cat_image)=split("::",$base[$i]);

            
$num++;

            
$nums=$num/($colonki+1);

            if(!
strstr(($nums),"."))
            {
                
$table_cat="</tr><tr>\n";
            }
            else
            {

                
$table_cat="<td align=center >".$name_cat."</td>\n";
            }

            
$array[]=$table_cat;
   }
echo 
implode("",$array);
echo
"</tr></table>";
?>

   
 
 автор: provodnik   (29.03.2007 в 13:43)   письмо автору
 
   для: Webmaster-X   (29.03.2007 в 12:15)
 

Это мой рабочий код на основе получения данных из MySql. Может он пойдет, в качестве примера:

<?
$query 
mysql_query("SELECT * FROM tbl")
echo 
"<table><tr>";
$i=0;
$ROW_COUNT=// Количество <td> в строке таблицы

while($a mysql_fetch_array($query))
{
    
$i++;
    echo 
"<td>";
    echo 
$a['id'];
    echo 
"</td>";
    if((
$i $ROW_COUNT)==0) echo "</tr><tr>";
}
echo
"</tr></table>";
?>

   
 
 автор: Webmaster-X   (30.03.2007 в 12:49)   письмо автору
 
   для: provodnik   (29.03.2007 в 13:43)
 

provodnik, спасибо. Твой сод будет получше, может комуто ещё понадобится

Я переписал его под себя следующим образом


<?
echo "<table><tr>"
$i=0
$ROW_COUNT=// Количество <td> в строке таблицы

 
while(list(,$array)=each($base))
{
            
$i++;
            
$arr explode("::",$array);
            echo 
"<td>" $arr[3] . "</td>\n";
            if((
$i $ROW_COUNT)==0) echo "</tr><tr>\n";
}
echo
"\n</tr>\n</table>";
?>

   
 
 автор: Trianon   (30.03.2007 в 12:55)   письмо автору
 
   для: Webmaster-X   (30.03.2007 в 12:49)
 

я буду обеспокоен здоровьем того, кому вот это while(list(,$array)=each($base)) понадобится.

   
 
 автор: Valick   (30.03.2007 в 13:23)   письмо автору
 
   для: Trianon   (30.03.2007 в 12:55)
 

Trianon, взгляните на мой код, если не трудно:

<?php
function arr_echo($base,$s)
{
$i=0;
if (empty(
$base)) exit;
if (empty(
$s)) $s=false;
 
echo 
"<table align='center' border='1'><tr>";
foreach    (
$base as $key => $val
    {
    echo 
"<td valign='top'>$key<br>";
    foreach (
$val as $str)
        { 
        echo 
"$str<br>";
        }
    echo 
"</td>";
    
$i++;
    if (
$s) if(($i $s)==0) echo "</tr><tr>";
    }
echo 
"</tr></table><br>";
}
 
$base=array(  

"категория1"=>array("описание1","описание2","описание3","описание4",),  
"категория2"=>array("описание1","описание2","описание3","описание4","описание5","описание6",),  
"категория3"=>array("описание1","описание2","описание3","описание4","описание5"), 
"категория4"=>array(),
"категория5"=>array("описание1","описание2","описание3","описание4","описание5"),
 
// и так дальше...  

);
arr_echo($base,2)
?>


Хочу ещё помудрить с условиями, так для общего развития)

   
 
 автор: Trianon   (30.03.2007 в 13:32)   письмо автору
 
   для: Valick   (30.03.2007 в 13:23)
 

Никаких особых ужасов не увидел.
Разве только количество столбцов в последней строке при таком подходе оказывается обычно несогласованным с предыдущими....

   
 
 автор: Trianon   (30.03.2007 в 13:35)   письмо автору
 
   для: Trianon   (30.03.2007 в 13:32)
 

Условие смены строк я написал бы не так

 $i++; 
    if ($s) if(($i % $s)==0) echo "</tr><tr>"; 
а так

    if ($s && !(++$i % $s)) 
        echo "</tr><tr>"; 

Но Вы ж понимаете - тут дело вкуса....

   
 
 автор: Valick   (30.03.2007 в 13:42)   письмо автору
 
   для: Trianon   (30.03.2007 в 13:35)
 

Да вчера позно было, и с одним & у меня не получилось)))) а с утра дошло, но руки не дошли, а вот то что инкремент в условие перенести я не догадался, спасибо.. я всегда говорил, что со стороны виднее)

   
 
 автор: Webmaster-X   (30.03.2007 в 13:35)   письмо автору
 
   для: Trianon   (30.03.2007 в 12:55)
 

Trianon, почему вам непонравилось и если можна заменить на более лучшую структуру подскажите как?

   
 
 автор: Trianon   (30.03.2007 в 13:48)   письмо автору
 
   для: Webmaster-X   (30.03.2007 в 13:35)
 

Потому что, прочтя эту строку , я стал опасаться за своё :)))

Я вроде знаю и пользуюсь и функцией list() и функцией each(), последней, правда, реже.
Но вид этой строки заставил меня перечитывать мануал.
Причем в мануале я не обнаружил разрешения опускать начальные элементы списка.
Пришлось писать тестовый пример, чтобы понять, что ж Вы всё же хотели выразить.
У меня получилось, что в конечном итоге от всего массива list() оставил оодин элемент.

Если вся эта гирлянда была затеяна только для того, чтоб объединить while и изъятие из 1-го элемента массива, то я пас. Не должен человек столько думать, пытаясь понять написанный цикл.

Это всё IMHO конечно.
По моему глубокому убеждению, вопросы стиля нельзя навязывать.
Их можно лишь согласовывать (правда, работая в команде, это уже нужно делать. )
Так что то, что я написал - исключительно личная реакция на увиденное, а вовсе не догма.


Интересно мнение Cheops'а послушать. Он, наоборот, обычно мой стиль не переносит, из-за того, что я, там где это можно, стараюсь использовать условные операции вместо операторов, и пытаюсь не засорять код лишними фигурными скобками. Интересно, что он скажет про Ваш....

   
 
 автор: cheops   (31.03.2007 в 02:16)   письмо автору
 
   для: Trianon   (30.03.2007 в 13:48)
 

Тут поддерживаю Trianon - лучше не использовать Perl-овские штучки (тем более безобразно описанные в PHP)... Код, если и критиковал когда, то только из-за его "хитрости" - т.е. оправданной сложности... У меня сложилось впечатление, что вы никогда не упускаете возможности сделать код более эффективным, если такая возможность имеется, если такой возможности нет, то стремитесь к читабельному коду (без дела ни один трюк не применяли)... Так программируют системщики и микроэлектронщики... Я всегда с прикладными задачами возился, где на первом месте читабельность (даже в ущерб производительности), так как нужно отвлечься от внутренней реализации и оперировать реальными объектами и их взаимодействием, т.е. программирование протекает на более высоком абстрактном уровне - если код будет сложный - как правило, проект захлёбывается.

PS Подходы понятно почему такие складываются, системный код живёт много дольше прикладного. В системном коде важна эффективность, в прикладном - скорость его разработки. Хотя деление, конечно, условное и прикладной код может жить десятилетиями и железки выпускать иногда требуется очень быстро.

   
Rambler's Top100
вверх

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