|
|
|
|
|
для: sim5
(18.10.2008 в 03:59)
| | Так разжевали .... ))) Спасибо большое.... | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(18.10.2008 в 01:58)
| | Вы думаете проблема в многомерности массива? Вот как применить то, что я вам раньше показывал, но(!) зная, что мы расладываем таблицу "в глубину", которую предварительно узнаем. Пример разложения одномерного и многомерного массивов одним и тем же способом:
<?
$res = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
//требуемое количество колонок
$col = 4;
//получим число элементов массива,
//и, если оно не кратно числу колонок, дополним
$n = ($col>count($res) || !(count($res)%$col)) ? count($res) : count($res)+($col-count($res)%$col);
//получаем число строк разложения
$n /= $col;
print '<TABLE border="1">';
for ($i=0; $i<$n; $i++) {
print "<tr>";
for ($k=0; $k<$col; $k++) {
$res[$i+$n*$k] ? print "<TD>".$res[$i+$n*$k]."</TD>" : print "<TD> </TD>";
}
print "</tr>";
}
print "</TABLE>";
//разложим так же многомерный массив
$res = array(array(1,2),array(3,4),array(5,6),array(7,8),array(9,10),
array(11,12),array(13,14),array(15,16),array(17,18),array(19,20),
array(21,22),array(23,24),array(25,26),array(27,28),array(29,30));
$col = 4;
$n = ($col>count($res) || !(count($res)%$col)) ? count($res) : count($res)+($col-count($res)%$col);
$n /= $col;
print '<TABLE border="1">';
for ($i=0; $i<$n; $i++) {
print "<tr>";
for ($k=0; $k<$col; $k++) {
$res[$i+$n*$k] ? print "<TD>".$res[$i+$n*$k][0]."-".$res[$i+$n*$k][1]."</TD>"
: print "<TD> </TD>";
}
print "</tr>";
}
print "</TABLE>";
?>
|
Вы хотите строго 4 колонки, то есть фиксированно, а поэтому можно вложенный цикл выбросить, так как вам заведомо известно смещение. Как это можно прописать одним циклом? | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(18.10.2008 в 01:41)
| | А как же такое не назвать насилием :) Ошибка первая - вы сразу не объяснили как нужно осуществить вывод полученного ресурса, указав лишь что в 4 колонки. Я и предложил вам естественный вывод - слева-направо - сверху-вниз, говоря языком элетронным - строчную развертку. ) Вам же нужна вертикальная развертка (кадровая) - сверху-вниз - слева-направо. Зная об этом, вы тем не менее, пытаетесь решить задачу подходом, который ни как вам не годится. Наличие вложенных циклов, это тоже лишнее и не нужное. Решений может быть только два:
1. Получение массива разложенно под будущую таблицу.
2. Вывод ресурса сразу в HTML-таблицу, с получением данных ресурса по смещению.
Не надо делать поправку на отсутствие опыта и слабое знание РНР - вы не верно подходте к решению простой арифметической задачи, от сюда и проблемы.
Первый вариант вас не устраивает, вы пытаетесь вторым - похвально, но... Уясните в конце концов, что в этом случае определяющим и главным будет не 4, а число строк в таблице. Я об этом вам говорил уже дважды, вы на это ноль внимания. Попробуйте решить сами, исходя из следующего:
1. Узнать сколько всего записей в исходном ресурсе.
2. Узнать сколько итераций должен иметь цикл.
3. Если всего записей 15, то разделив их на 4, получаем 3 с остатком - как быть?
4. Ответив на первых три вопроса, в одном цикле, за один проход получать записи ресурса по смещению, которое будет определять полученное выше значение, и получить html-таблицу.
Для того чтобы это понять, разложите сначала массив - простую последовательность цифр от 1 до N. | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 19:13)
| |
<?
$query="SELECT id_model,model FROM $tbl_model WHERE id_marka=$_GET[id_marka] ORDER BY model";
$mdl = mysql_query($query);
if(!$mdl)
{
throw new ExceptionMySQL(mysql_error(),
$query,
"Ошибка при обращении
к таблице позиции");
}
$rows=4;
echo "<table>";
if(mysql_num_rows($mdl)>0)
{
$num=(int)(mysql_num_rows($mdl)/$rows);
if(mysql_num_rows($mdl)%$rows)$num++ ;
for ($i=0; $i<$num; $i++)
{
echo "<tr>";
for ($j=0; $j<$rows; $j++)
{
echo "<td width=25%>".@mysql_result($mdl,$j*$num+$i)."</td>\n";
echo "<td> </td>\n";
}
echo "</tr>\n";
}
}
echo "</table>";
|
Вот данный код выводит то что надо .... НО... выводит ТОЛЬКО одинарный массив ... а я хочу организовать как в http://catalog.drom.ru/toyota/ (Надеюсь доходчиво объяснил...)
!!!!!!!!!!!!!!!!!!(Возьмите поправку на новичка)!!!!!!!!!!!!!!!!!!!!!!!! %) Потому что многие вещи не НАПИСАНЫ в книгах и интернет ресурсах.... а берутся из личного опыта.....я учусь ... я стараюсь не все получается... потому и обращаюсь к всевышним мира сего. | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:07)
| | Вот я тоже (новичек Канечное"в ВЕБЕ"), но насилия особого не заметил.
Спасибо за защиту....)))))))) | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:54)
| | Насилие в коде, в подходе :) Можно и непосредственно ведь и сам ресурс разложить, если ограничить цикл итерацией равным числу строк в таблице, и выводить элементы, получая их с учетом всего записей в ресурсе, как смещение полученное: итерация_цикла+число_колонок[индекс_поля]. Если я не напутал, то так. Но не так же издеваться как автор, я считаю такое насилием ;-) | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 18:15)
| | Так почему насилие-то?
php разве не индексирует набор строк результата буферизированного запроса? | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2008 в 18:07)
| | Да я заговорился уже, я хотел сказать о ресурсе :) Запросы к базе я даже и не имел ввиду. Просто насилие над полученным. | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(17.10.2008 в 17:44)
| | Не надо строить в цикле таблицу, ничего у вас не получиться. В этом цикле из полученного ресурса нужно создать массив, который уже потом выведите в таблицу. Для этого нужно сперва узнать число строк будущей таблицы, разделив число записей ресурса, на число необходимых колонок. По этому числу проверять и в новый массив добавлять элементы так, чтобы у вас в итоге получилось, например:
0 => array(array(A0,B0),array(A10,B10),array(A20,B20),array(A30,B30)),
1 => array(array(A1,B1),array(A11,B11),array(A21,B21),array(A31,B31)),
....
и т.д., если число строк таблицы получиться равное 10. Вот теперь этот уже массив без всяких проверок выводите в таблицу, потому как тут проверять нечего уже.
PS. А можно просто, делая каждую запись нового массива одномерным массивом, то есть так:
0 => array(A0,B0,A10,B10,A20,B20,A30,B30),
1 => array(A1,B1,A11,B11,A21,B21,A31,B31),
....
Для этого будет достаточно проверять установленный счетчик и одной функции - array_push(). В цикле while в его начале устанавливаете счетчик как:
$i = $i < $m ? $i : 0;
где $m - число полученных строк в будущей таблице. Теперь добавляете элементы в новый массив, пусть это будет $table:
array_push($table[$i], A, B);
где А и В - поля вашей таблицы в ресурсе.
$i++;
Вот теперь полученный массив $table выводите в таблицу. Число итераций цикла при этом равно числу строк в массиве, а элементы его, это данные для ячеек, число которых вы уже знаете, и знаете, что каждая пара элементов массива каждой строки пренадлежит одной ячейке таблицы:
<tr>
<td>$table[$i][0], $table[$i][1]</td>
<td>$table[$i][2], $table[$i][3]</td>
<td>$table[$i][4], $table[$i][5]</td>
<td>$table[$i][6], $table[$i][7]</td>
</tr>
и т.д... | |
|
|
|
|
|
|
|
для: sim5
(17.10.2008 в 17:31)
| | где Вы там нашли насилие над базой?
вроде один запрос всего.
Выборка данных из резалтсета в произвольном порядке, да. Ну и что? | |
|
|
| |
|