Поменять местами столбцы и строки в таблице

Reken

Подскажите пожалуйста в решении следующей задачи:
Допустим есть таблица в базе MySQL

Код (Text):
  1. A|A1|A2|A3|A4|A5|A6|A7|A8|A9|A10
  2. B|
  3. B1|
  4. B2|

Допустим я выведу эту таблицу через PHP, таким образом:

Код (Text):
  1. # Записываем значения из БД в массив
  2. $query =»SELECT * FROM forecast»;
  3. $result = mysqli_query($mysqli, $query) or die(«ERORRRR » . mysqli_error($mysqli));
  4. if($result)
  5. {
  6. $rows = mysqli_num_rows($result);
  7.  
  8. # Прибавляем строки в таблице до тех пор, пока не закончится информация в массиве      
  9.     for ($i = 0 ; $i < $rows ; ++$i)
  10.     {
  11.      $row = mysqli_fetch_row($result);
  12.  
  13. # Заменяем в массиве точки на запятые
  14.         $row=str_replace(«.»,»,»,$row);
  15.  
  16.  
  17.          echo «<tr>»;
  18.  
  19. # Отображаем в таблице только 10 столбцов из массива
  20.             for ($j = 0 ; $j < 38 ; ++$j) echo «<td>$row[$j]</td>»;
  21.  
  22.         echo «</tr>»;
  23.     }
  24. }

В итоге у меня будет отображаться таблица из БД. А как мне отобразить таблицу так, что бы столбцы и строки поменялись местами?
Наглядный пример того что нужно:

Код (Text):
  1. B|B1|B2
  2. A|
  3. A1|
  4. A2|
  5. A3|
  6. A4|
  7. A5|
  8. A6|
  9. A7|
  10. A8|
  11. A9|
  12. A10|
 

artoodetoo

Если откажешся от мешанины кода и HTML, то решение всплывет. Это будет не просто, а ппц как просто :)
Сначала сформируй двумерный массив данных для передачи в блок отображения (можешь назвать его шаблоном). А затем меняй строки и столбцы ($i и $j) как душа пожелает. ))))

 

Reken

Если это так просто, покажи пример кода, как сделал бы ты?…

 

artoodetoo

можно я не буду? ты либо сумеешь циклы по i и j поменять местами, либо нет.
мне даже шутить по этому поводу не хочется.

 

Drunkenmunky

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

 

Reken

Что то всё равно понять не могу…
Вот конкретно в моем примере, я забираю все данные из БД через select.
Далее полученные строки, через цикл for я вывожу на страницу используя разделение строк при помощи mysqli_fetch_row()
Не могу понять, как i и j поменять местами.
Artoodetoo, скрипт конечно же не надо за меня писать, но подскажи пожалуйста более понятно, как поменять эти циклы по i и j. Я в этом PHP человек новый, много чего пока что недопонимаю…

 

artoodetoo

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

Создай новый php файл, в нём инициируй двумерный массив, т.е. строки и столбцы. Чтобы было веселее, пусть это будет представление шахматной доски 8×8, строки пронумерованы от 1 до 8, столбцы от ‘a’ до ‘h’. В каждом элементе массива должно быть значение ‘a1’, ‘a2’, и т.д. Понимаешь?

Напиши два цикла так, чтобы они выводили массив на консоль вот в таком виде:

Код (Text):
  1.  
  2. a8 b8 c8 d8 e8 f8 g8 h8
  3. a7 b7 c7 d7 e7 f7 g7 h7
  4. a6 b6 c6 d6 e6 f6 g6 h6
  5. a5 b5 c5 d5 e5 f5 g5 h5
  6. a4 b4 c4 d4 e4 f4 g4 h4
  7. a3 b3 c3 d3 e3 f3 g3 h3
  8. a2 b2 c2 d2 e2 f2 g2 h2
  9. a1 b1 c1 d1 e1 f1 g1 h1

Когда добъешся, перепиши циклы так, чтобы доска выводилась так:

Код (Text):
  1.  
  2. a8 a7 a6 a5 a4 a3 a2 a1
  3. b8 b7 b6 b5 b4 b3 b2 b1
  4. c8 c7 c6 c5 c4 c3 c2 c1
  5. d8 d7 d6 d5 d4 d3 d2 d1
  6. e8 e7 e6 e5 e4 e3 e2 e1
  7. f8 f7 f6 f5 f4 f3 f2 f1
  8. g8 g7 g6 g5 g4 g3 g2 g1
  9. h8 h7 h6 h5 h4 h3 h2 h1

Пожалуйста, не задавай больше вопросов пока не сделаешь. Иначе я зря потратил время, не заставляй тратить ещё больше. Удачи!

 

iceblood

Просто не понимает, что 2-а цыкала — должны быть вложенными, когда выводят данные.

Код (Text):
  1. цикл1{
  2. echo «a»;
  3.   цикл2{
  4.   echo «b»;}
  5. }

А когда нужно наоборот (инверсию таблицы — перевернуть) -менять местами цикл1 вложен в цикл2.
Вот пример:

Код (Text):
  1. <?php
  2. for($num=1;$num<=10;$num++){
  3. echo $num;
  4. for($symbol=»a»;$symbol<=’j’;$symbol++){
  5. echo «-«.$symbol;
  6. }
  7. echo «n»;
  8. }
  9. echo «———n»;
  10. //invers
  11. for($symbol=»a»;$symbol<=’j’;$symbol++){
  12. echo $symbol;
  13. for($num=1;$num<=10;$num++){
  14. echo «-«.$num;
  15. }
  16. echo «n»;
  17. }
 

iceblood

Вывод как переворачиваются строки и столбцы у меня на компе:

Код (Text):
  1. root@srv:~# php hello.php
  2. 1-a-b-c-d-e-f-g-h-i-j
  3. 2-a-b-c-d-e-f-g-h-i-j
  4. 3-a-b-c-d-e-f-g-h-i-j
  5. 4-a-b-c-d-e-f-g-h-i-j
  6. 5-a-b-c-d-e-f-g-h-i-j
  7. 6-a-b-c-d-e-f-g-h-i-j
  8. 7-a-b-c-d-e-f-g-h-i-j
  9. 8-a-b-c-d-e-f-g-h-i-j
  10. 9-a-b-c-d-e-f-g-h-i-j
  11. 10-a-b-c-d-e-f-g-h-i-j
  12. ———
  13. a-1-2-3-4-5-6-7-8-9-10
  14. b-1-2-3-4-5-6-7-8-9-10
  15. c-1-2-3-4-5-6-7-8-9-10
  16. d-1-2-3-4-5-6-7-8-9-10
  17. e-1-2-3-4-5-6-7-8-9-10
  18. f-1-2-3-4-5-6-7-8-9-10
  19. g-1-2-3-4-5-6-7-8-9-10
  20. h-1-2-3-4-5-6-7-8-9-10
  21. i-1-2-3-4-5-6-7-8-9-10
  22. j-1-2-3-4-5-6-7-8-9-10

И всегда задавай вопросы ))

 

Reken

Artoodetoo я кажется начал понимать…Подскажи пожалуйста я правильно понял, на примере шахматной доски:
1) Я создал двумерный массив

Код (Text):
  1. $arr = array( array(‘a1’, ‘a2’, ‘a3’, ‘a4’, ‘a5’, ‘a6’, ‘a7’, ‘a8’),
  2.   array(‘b1’, ‘b2’, ‘b3’, ‘b4’, ‘b5’, ‘b6’, ‘b7’, ‘b8’),
  3. array(‘c1’, ‘c2’, ‘c3’, ‘c4’, ‘c5’, ‘c6’, ‘c7’, ‘c8’),
  4. array(‘d1’, ‘d2’, ‘d3’, ‘d4’, ‘d5’, ‘d6’, ‘d7’, ‘d8’),
  5. array(‘e1’, ‘e2’, ‘e3’, ‘e4’, ‘e5’, ‘e6’, ‘e7’, ‘e8’),
  6. array(‘f1’, ‘f2’, ‘f3’, ‘f4’, ‘f5’, ‘f6’, ‘f7’, ‘f8’),
  7. array(‘g1’, ‘g2’, ‘g3’, ‘g4’, ‘g5’, ‘g6’, ‘g7’, ‘g8’),
  8. array(‘h1’, ‘h2’, ‘h3’, ‘h4’, ‘h5’, ‘h6’, ‘h7’, ‘h8’));  

Далее начал выводить его через циклы, вначале так:

Код (Text):
  1.  
  2. #Запускаю первый цикл for, где изначально переменная i=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8
  3. for ($i = 0; $i < 8; $i++)
  4.  {
  5. #Запускаю второй цикл for, где изначально переменная j=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8
  6. for ($j=0; $j <8; $j++)
  7.  {
  8. #Вывожу на экран массив. Я это вижу так, пока первый ключ равен 0, второй ключ будет менять свои значения от 0 до 8, что в результате приведет к выводу массива слево направо по столбцам…
  9.        echo ‘ | ‘.$arr[$i][$j];
  10.     }
  11.     echo ‘<br />’;
  12.  
  13. #В итоге получил результат:
  14. | a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8
  15. | b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8
  16. | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8
  17. | d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8
  18. | e1 | e2 | e3 | e4 | e5 | e6 | e7 | e8
  19. | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8
  20. | g1 | g2 | g3 | g4 | g5 | g6 | g7 | g8
  21. | h1 | h2 | h3 | h4 | h5 | h6 | h7 | h8

Далее я вывел по другому массив на экран:

Код (Text):
  1.  
  2. #Запускаю первый цикл for, где изначально переменная i=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8
  3. for ($i = 0; $i < 8; $i++)
  4.  {
  5. #Запускаю второй цикл for, где изначально переменная j=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8
  6. for ($j=0; $j <8; $j++)
  7.  {
  8. #Вывожу на экран массив. Я это вижу так, пока первый ключ будет меняться от 0 до 8, второй ключ будет равен 0, что в результате приаедет к выводу массива сверху вниз по строкам
  9.        echo ‘ | ‘.$arr[$j][$i];
  10.     }
  11.     echo ‘<br />’;
  12.  
  13. #В итоге получил результат:
  14. | a1 | b1 | c1 | d1 | e1 | f1 | g1 | h1
  15. | a2 | b2 | c2 | d2 | e2 | f2 | g2 | h2
  16. | a3 | b3 | c3 | d3 | e3 | f3 | g3 | h3
  17. | a4 | b4 | c4 | d4 | e4 | f4 | g4 | h4
  18. | a5 | b5 | c5 | d5 | e5 | f5 | g5 | h5
  19. | a6 | b6 | c6 | d6 | e6 | f6 | g6 | h6
  20. | a7 | b7 | c7 | d7 | e7 | f7 | g7 | h7
  21. | a8 | b8 | c8 | d8 | e8 | f8 | g8 | h8

Вроде бы я правильно понял? Если да, тогда попробую разобраться с таблицей, в чем изначально и был вопрос
Artoodetoo спасибо за помощь.

 

artoodetoo

Строго говоря, надо менять местами именно циклы, а не упоминание в $arr[$i][$j]. Сейчас твой массив «квадратный», поэтому получилось. Но если бы размерность была другая, ты бы напоролся на ошибку. Подумай об этом, проэкспериментируй и потом приспособь для своей задачи.

 

Reken

Так получается, что бы повернуть нужную мне таблицу, нужно для начала выгрузить её из MySQL в двумерный массив?
Сейчас она у меня просто в массив выгружается…

 

artoodetoo

Я об этом написал в первом же комментарии.
— Добавлено —
Надо разделять уровень получения данных и уровень представления.

 

Вероломство

человек там сознание потерял и в обмороке теперь лежит, прочитав слово — представление

 

Reken

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

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *