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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите разобраться с вертикальным выводом

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

 
 автор: dmtrfoxerr   (18.10.2008 в 17:50)   письмо автору
 
   для: sim5   (18.10.2008 в 03:59)
 

Так разжевали .... ))) Спасибо большое....

  Ответить  
 
 автор: sim5   (18.10.2008 в 06:26)   письмо автору
 
   для: 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>&nbsp;</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>&nbsp;</TD>";
   }
  print 
"</tr>";
}
print 
"</TABLE>";
?>

Вы хотите строго 4 колонки, то есть фиксированно, а поэтому можно вложенный цикл выбросить, так как вам заведомо известно смещение. Как это можно прописать одним циклом?

  Ответить  
 
 автор: sim5   (18.10.2008 в 03:59)   письмо автору
 
   для: dmtrfoxerr   (18.10.2008 в 01:41)
 

А как же такое не назвать насилием :) Ошибка первая - вы сразу не объяснили как нужно осуществить вывод полученного ресурса, указав лишь что в 4 колонки. Я и предложил вам естественный вывод - слева-направо - сверху-вниз, говоря языком элетронным - строчную развертку. ) Вам же нужна вертикальная развертка (кадровая) - сверху-вниз - слева-направо. Зная об этом, вы тем не менее, пытаетесь решить задачу подходом, который ни как вам не годится. Наличие вложенных циклов, это тоже лишнее и не нужное. Решений может быть только два:
1. Получение массива разложенно под будущую таблицу.
2. Вывод ресурса сразу в HTML-таблицу, с получением данных ресурса по смещению.
Не надо делать поправку на отсутствие опыта и слабое знание РНР - вы не верно подходте к решению простой арифметической задачи, от сюда и проблемы.

Первый вариант вас не устраивает, вы пытаетесь вторым - похвально, но... Уясните в конце концов, что в этом случае определяющим и главным будет не 4, а число строк в таблице. Я об этом вам говорил уже дважды, вы на это ноль внимания. Попробуйте решить сами, исходя из следующего:

1. Узнать сколько всего записей в исходном ресурсе.
2. Узнать сколько итераций должен иметь цикл.
3. Если всего записей 15, то разделив их на 4, получаем 3 с остатком - как быть?
4. Ответив на первых три вопроса, в одном цикле, за один проход получать записи ресурса по смещению, которое будет определять полученное выше значение, и получить html-таблицу.

Для того чтобы это понять, разложите сначала массив - простую последовательность цифр от 1 до N.

  Ответить  
 
 автор: dmtrfoxerr   (18.10.2008 в 01:58)   письмо автору
 
   для: 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>&nbsp;</td>\n"
             } 

             echo 
"</tr>\n"
         } 

    } 
     echo 
"</table>";

Вот данный код выводит то что надо .... НО... выводит ТОЛЬКО одинарный массив ... а я хочу организовать как в http://catalog.drom.ru/toyota/ (Надеюсь доходчиво объяснил...)
!!!!!!!!!!!!!!!!!!(Возьмите поправку на новичка)!!!!!!!!!!!!!!!!!!!!!!!! %) Потому что многие вещи не НАПИСАНЫ в книгах и интернет ресурсах.... а берутся из личного опыта.....я учусь ... я стараюсь не все получается... потому и обращаюсь к всевышним мира сего.

  Ответить  
 
 автор: dmtrfoxerr   (18.10.2008 в 01:41)   письмо автору
 
   для: Trianon   (17.10.2008 в 18:07)
 

Вот я тоже (новичек Канечное"в ВЕБЕ"), но насилия особого не заметил.
Спасибо за защиту....))))))))

  Ответить  
 
 автор: sim5   (17.10.2008 в 19:13)   письмо автору
 
   для: Trianon   (17.10.2008 в 18:54)
 

Насилие в коде, в подходе :) Можно и непосредственно ведь и сам ресурс разложить, если ограничить цикл итерацией равным числу строк в таблице, и выводить элементы, получая их с учетом всего записей в ресурсе, как смещение полученное: итерация_цикла+число_колонок[индекс_поля]. Если я не напутал, то так. Но не так же издеваться как автор, я считаю такое насилием ;-)

  Ответить  
 
 автор: Trianon   (17.10.2008 в 18:54)   письмо автору
 
   для: sim5   (17.10.2008 в 18:15)
 

Так почему насилие-то?
php разве не индексирует набор строк результата буферизированного запроса?

  Ответить  
 
 автор: sim5   (17.10.2008 в 18:15)   письмо автору
 
   для: Trianon   (17.10.2008 в 18:07)
 

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

  Ответить  
 
 автор: sim5   (17.10.2008 в 18:13)   письмо автору
 
   для: 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>
и т.д...

  Ответить  
 
 автор: Trianon   (17.10.2008 в 18:07)   письмо автору
 
   для: sim5   (17.10.2008 в 17:31)
 

где Вы там нашли насилие над базой?
вроде один запрос всего.
Выборка данных из резалтсета в произвольном порядке, да. Ну и что?

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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