За последние 24 часа нас посетили 22490 программистов и 1132 робота. Сейчас ищут 657 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Reken, 5 янв 2021.

Метки:
  1. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Подскажите пожалуйста в решении следующей задачи:
    Допустим есть таблица в базе 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|
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

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

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Если это так просто, покажи пример кода, как сделал бы ты?...
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    можно я не буду? ты либо сумеешь циклы по i и j поменять местами, либо нет.
    мне даже шутить по этому поводу не хочется.
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Выводите значения выдачи добавляя каждое в конец отдельного массива.
    Потом распечатываете их в нужной последовательности, или без неё.
     
  6. Reken

    Reken Активный пользователь

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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Окей, попробую сделать из тебя программиста.
    Отбрось всё лишнее. Неважно откуда ты добываешь данные, HTML разметка тоже не важна. Тебе надо научиться менять столбцы и колонки местами.

    Создай новый php файл, в нём инициируй двумерный массив, т.е. строки и столбцы. Чтобы было веселее, пусть это будет представление шахматной доски 8x8, строки пронумерованы от 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
    Пожалуйста, не задавай больше вопросов пока не сделаешь. Иначе я зря потратил время, не заставляй тратить ещё больше. Удачи!
     
    mkramer нравится это.
  8. iceblood

    iceblood Активный пользователь

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Просто не понимает, что 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. }
     
    #8 iceblood, 6 янв 2021
    Последнее редактирование: 6 янв 2021
  9. iceblood

    iceblood Активный пользователь

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Вывод как переворачиваются строки и столбцы у меня на компе:
    Код (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
    И всегда задавай вопросы ))
     
    #9 iceblood, 6 янв 2021
    Последнее редактирование: 6 янв 2021
  10. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    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 спасибо за помощь.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Строго говоря, надо менять местами именно циклы, а не упоминание в $arr[$i][$j]. Сейчас твой массив "квадратный", поэтому получилось. Но если бы размерность была другая, ты бы напоролся на ошибку. Подумай об этом, проэкспериментируй и потом приспособь для своей задачи.
     
  12. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Так получается, что бы повернуть нужную мне таблицу, нужно для начала выгрузить её из MySQL в двумерный массив?
    Сейчас она у меня просто в массив выгружается...
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Я об этом написал в первом же комментарии.
    --- Добавлено ---
    Надо разделять уровень получения данных и уровень представления.
     
    Вероломство нравится это.
  14. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    человек там сознание потерял и в обмороке теперь лежит, прочитав слово - представление
     
  15. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Никто в обмороке не лежит...Artoodetoo всё по делу написал, я понял решение поставленной задачи, и получилось сделать как мне нужно было.