|
|
|
| Подскажите как вывисти данные с массива в 2 или 3 ряда
Вид массива
<?
$base=array(
"0"=>"auto_increment::catname::catdesrc::catimage::",
"1"=>"auto_increment::catname::catdesrc::catimage::",
"2"=>"auto_increment::catname::catdesrc::catimage::",
// и так дальше...
);
?>
|
| |
|
|
|
|
|
|
|
для: Webmaster-X
(28.03.2007 в 17:01)
| | не совсем понял..... | |
|
|
|
|
|
|
|
для: 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 в 17:42)
| | Чё никто не знает? | |
|
|
|
|
|
|
|
для: Webmaster-X
(28.03.2007 в 18:39)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Valick
(28.03.2007 в 19:22)
| | Я недумаю что это сложно, но я не сталкивался с этим и надеюсь на помощь. | |
|
|
|
|
|
|
|
для: Webmaster-X
(28.03.2007 в 19:31)
| | То есть нужно чтобы было по 3 столбца на строчку или все столбцы которые получтся в одну строку?
[поправлено модератором] | |
|
|
|
|
|
|
|
для: LuxeMate
(28.03.2007 в 19:47)
| | Речь идёт о категориях и выводом их по лолонкам а не в ряд или встрочку, к примеру взять любой каталог ссылок | |
|
|
|
|
|
|
|
для: 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]); | |
|
|
|
|
|
|
|
для: Valick
(28.03.2007 в 21:03)
| | эти переменные из этого оператора и берутся. Конструкция list() слева от = рассовывает элементы присваиваемого массива по своим аргументам.
http://php.net/list | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2007 в 22:04)
| | Trianon, спасибо ;-) | |
|
|
|
|
|
|
|
для: Webmaster-X
(28.03.2007 в 17: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>";
?>
|
| |
|
|
|
|
|
|
|
для: 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 в 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>";
?>
|
| |
|
|
|
|
|
|
|
для: Webmaster-X
(29.03.2007 в 12:15)
| | Это мой рабочий код на основе получения данных из MySql. Может он пойдет, в качестве примера:
<?
$query = mysql_query("SELECT * FROM tbl")
echo "<table><tr>";
$i=0;
$ROW_COUNT=3 // Количество <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>";
?>
|
| |
|
|
|
|
|
|
|
для: provodnik
(29.03.2007 в 13:43)
| | provodnik, спасибо. Твой сод будет получше, может комуто ещё понадобится
Я переписал его под себя следующим образом
<?
echo "<table><tr>";
$i=0;
$ROW_COUNT=3 // Количество <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>";
?>
|
| |
|
|
|
|
|
|
|
для: Webmaster-X
(30.03.2007 в 12:49)
| | я буду обеспокоен здоровьем того, кому вот это while(list(,$array)=each($base)) понадобится. | |
|
|
|
|
|
|
|
для: 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)
?>
|
Хочу ещё помудрить с условиями, так для общего развития) | |
|
|
|
|
|
|
|
для: Valick
(30.03.2007 в 13:23)
| | Никаких особых ужасов не увидел.
Разве только количество столбцов в последней строке при таком подходе оказывается обычно несогласованным с предыдущими.... | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2007 в 13:32)
| | Условие смены строк я написал бы не так
$i++;
if ($s) if(($i % $s)==0) echo "</tr><tr>";
| а так
if ($s && !(++$i % $s))
echo "</tr><tr>";
|
Но Вы ж понимаете - тут дело вкуса.... | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2007 в 13:35)
| | Да вчера позно было, и с одним & у меня не получилось)))) а с утра дошло, но руки не дошли, а вот то что инкремент в условие перенести я не догадался, спасибо.. я всегда говорил, что со стороны виднее) | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2007 в 12:55)
| | Trianon, почему вам непонравилось и если можна заменить на более лучшую структуру подскажите как? | |
|
|
|
|
|
|
|
для: Webmaster-X
(30.03.2007 в 13:35)
| | Потому что, прочтя эту строку , я стал опасаться за своё :)))
Я вроде знаю и пользуюсь и функцией list() и функцией each(), последней, правда, реже.
Но вид этой строки заставил меня перечитывать мануал.
Причем в мануале я не обнаружил разрешения опускать начальные элементы списка.
Пришлось писать тестовый пример, чтобы понять, что ж Вы всё же хотели выразить.
У меня получилось, что в конечном итоге от всего массива list() оставил оодин элемент.
Если вся эта гирлянда была затеяна только для того, чтоб объединить while и изъятие из 1-го элемента массива, то я пас. Не должен человек столько думать, пытаясь понять написанный цикл.
Это всё IMHO конечно.
По моему глубокому убеждению, вопросы стиля нельзя навязывать.
Их можно лишь согласовывать (правда, работая в команде, это уже нужно делать. )
Так что то, что я написал - исключительно личная реакция на увиденное, а вовсе не догма.
Интересно мнение Cheops'а послушать. Он, наоборот, обычно мой стиль не переносит, из-за того, что я, там где это можно, стараюсь использовать условные операции вместо операторов, и пытаюсь не засорять код лишними фигурными скобками. Интересно, что он скажет про Ваш.... | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2007 в 13:48)
| | Тут поддерживаю Trianon - лучше не использовать Perl-овские штучки (тем более безобразно описанные в PHP)... Код, если и критиковал когда, то только из-за его "хитрости" - т.е. оправданной сложности... У меня сложилось впечатление, что вы никогда не упускаете возможности сделать код более эффективным, если такая возможность имеется, если такой возможности нет, то стремитесь к читабельному коду (без дела ни один трюк не применяли)... Так программируют системщики и микроэлектронщики... Я всегда с прикладными задачами возился, где на первом месте читабельность (даже в ущерб производительности), так как нужно отвлечься от внутренней реализации и оперировать реальными объектами и их взаимодействием, т.е. программирование протекает на более высоком абстрактном уровне - если код будет сложный - как правило, проект захлёбывается.
PS Подходы понятно почему такие складываются, системный код живёт много дольше прикладного. В системном коде важна эффективность, в прикладном - скорость его разработки. Хотя деление, конечно, условное и прикладной код может жить десятилетиями и железки выпускать иногда требуется очень быстро. | |
|
|
|