Reken
Подскажите пожалуйста в решении следующей задачи:
Допустим есть таблица в базе MySQLКод (Text):
A|A1|A2|A3|A4|A5|A6|A7|A8|A9|A10 B| B1| B2|Допустим я выведу эту таблицу через PHP, таким образом:
Код (Text):
# Записываем значения из БД в массив $query =»SELECT * FROM forecast»; $result = mysqli_query($mysqli, $query) or die(«ERORRRR » . mysqli_error($mysqli)); if($result) { $rows = mysqli_num_rows($result); # Прибавляем строки в таблице до тех пор, пока не закончится информация в массиве for ($i = 0 ; $i < $rows ; ++$i) { $row = mysqli_fetch_row($result); # Заменяем в массиве точки на запятые $row=str_replace(«.»,»,»,$row); echo «<tr>»; # Отображаем в таблице только 10 столбцов из массива for ($j = 0 ; $j < 38 ; ++$j) echo «<td>$row[$j]</td>»; echo «</tr>»; } }В итоге у меня будет отображаться таблица из БД. А как мне отобразить таблицу так, что бы столбцы и строки поменялись местами?
Наглядный пример того что нужно:Код (Text):
B|B1|B2 A| A1| A2| A3| A4| A5| A6| A7| A8| A9| 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):
a8 b8 c8 d8 e8 f8 g8 h8 a7 b7 c7 d7 e7 f7 g7 h7 a6 b6 c6 d6 e6 f6 g6 h6 a5 b5 c5 d5 e5 f5 g5 h5 a4 b4 c4 d4 e4 f4 g4 h4 a3 b3 c3 d3 e3 f3 g3 h3 a2 b2 c2 d2 e2 f2 g2 h2 a1 b1 c1 d1 e1 f1 g1 h1Когда добъешся, перепиши циклы так, чтобы доска выводилась так:
Код (Text):
a8 a7 a6 a5 a4 a3 a2 a1 b8 b7 b6 b5 b4 b3 b2 b1 c8 c7 c6 c5 c4 c3 c2 c1 d8 d7 d6 d5 d4 d3 d2 d1 e8 e7 e6 e5 e4 e3 e2 e1 f8 f7 f6 f5 f4 f3 f2 f1 g8 g7 g6 g5 g4 g3 g2 g1 h8 h7 h6 h5 h4 h3 h2 h1Пожалуйста, не задавай больше вопросов пока не сделаешь. Иначе я зря потратил время, не заставляй тратить ещё больше. Удачи!
iceblood
Просто не понимает, что 2-а цыкала — должны быть вложенными, когда выводят данные.
Код (Text):
цикл1{ echo «a»; цикл2{ echo «b»;} }А когда нужно наоборот (инверсию таблицы — перевернуть) -менять местами цикл1 вложен в цикл2.
Вот пример:Код (Text):
<?php for($num=1;$num<=10;$num++){ echo $num; for($symbol=»a»;$symbol<=’j’;$symbol++){ echo «-«.$symbol; } echo «n»; } echo «———n»; //invers for($symbol=»a»;$symbol<=’j’;$symbol++){ echo $symbol; for($num=1;$num<=10;$num++){ echo «-«.$num; } echo «n»; }
iceblood
Вывод как переворачиваются строки и столбцы у меня на компе:
Код (Text):
root@srv:~# php hello.php 1-a-b-c-d-e-f-g-h-i-j 2-a-b-c-d-e-f-g-h-i-j 3-a-b-c-d-e-f-g-h-i-j 4-a-b-c-d-e-f-g-h-i-j 5-a-b-c-d-e-f-g-h-i-j 6-a-b-c-d-e-f-g-h-i-j 7-a-b-c-d-e-f-g-h-i-j 8-a-b-c-d-e-f-g-h-i-j 9-a-b-c-d-e-f-g-h-i-j 10-a-b-c-d-e-f-g-h-i-j ——— a-1-2-3-4-5-6-7-8-9-10 b-1-2-3-4-5-6-7-8-9-10 c-1-2-3-4-5-6-7-8-9-10 d-1-2-3-4-5-6-7-8-9-10 e-1-2-3-4-5-6-7-8-9-10 f-1-2-3-4-5-6-7-8-9-10 g-1-2-3-4-5-6-7-8-9-10 h-1-2-3-4-5-6-7-8-9-10 i-1-2-3-4-5-6-7-8-9-10 j-1-2-3-4-5-6-7-8-9-10И всегда задавай вопросы ))
Reken
Artoodetoo я кажется начал понимать…Подскажи пожалуйста я правильно понял, на примере шахматной доски:
1) Я создал двумерный массивКод (Text):
$arr = array( array(‘a1’, ‘a2’, ‘a3’, ‘a4’, ‘a5’, ‘a6’, ‘a7’, ‘a8’), array(‘b1’, ‘b2’, ‘b3’, ‘b4’, ‘b5’, ‘b6’, ‘b7’, ‘b8’), array(‘c1’, ‘c2’, ‘c3’, ‘c4’, ‘c5’, ‘c6’, ‘c7’, ‘c8’), array(‘d1’, ‘d2’, ‘d3’, ‘d4’, ‘d5’, ‘d6’, ‘d7’, ‘d8’), array(‘e1’, ‘e2’, ‘e3’, ‘e4’, ‘e5’, ‘e6’, ‘e7’, ‘e8’), array(‘f1’, ‘f2’, ‘f3’, ‘f4’, ‘f5’, ‘f6’, ‘f7’, ‘f8’), array(‘g1’, ‘g2’, ‘g3’, ‘g4’, ‘g5’, ‘g6’, ‘g7’, ‘g8’), array(‘h1’, ‘h2’, ‘h3’, ‘h4’, ‘h5’, ‘h6’, ‘h7’, ‘h8’));Далее начал выводить его через циклы, вначале так:
Код (Text):
#Запускаю первый цикл for, где изначально переменная i=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8 for ($i = 0; $i < 8; $i++) { #Запускаю второй цикл for, где изначально переменная j=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8 for ($j=0; $j <8; $j++) { #Вывожу на экран массив. Я это вижу так, пока первый ключ равен 0, второй ключ будет менять свои значения от 0 до 8, что в результате приведет к выводу массива слево направо по столбцам… echo ‘ | ‘.$arr[$i][$j]; } echo ‘<br />’; #В итоге получил результат: | a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8 | e1 | e2 | e3 | e4 | e5 | e6 | e7 | e8 | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | g1 | g2 | g3 | g4 | g5 | g6 | g7 | g8 | h1 | h2 | h3 | h4 | h5 | h6 | h7 | h8Далее я вывел по другому массив на экран:
Код (Text):
#Запускаю первый цикл for, где изначально переменная i=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8 for ($i = 0; $i < 8; $i++) { #Запускаю второй цикл for, где изначально переменная j=0, и будет увеличиваться на 1 при каждом цикле, пока не станет равна 8 for ($j=0; $j <8; $j++) { #Вывожу на экран массив. Я это вижу так, пока первый ключ будет меняться от 0 до 8, второй ключ будет равен 0, что в результате приаедет к выводу массива сверху вниз по строкам echo ‘ | ‘.$arr[$j][$i]; } echo ‘<br />’; #В итоге получил результат: | a1 | b1 | c1 | d1 | e1 | f1 | g1 | h1 | a2 | b2 | c2 | d2 | e2 | f2 | g2 | h2 | a3 | b3 | c3 | d3 | e3 | f3 | g3 | h3 | a4 | b4 | c4 | d4 | e4 | f4 | g4 | h4 | a5 | b5 | c5 | d5 | e5 | f5 | g5 | h5 | a6 | b6 | c6 | d6 | e6 | f6 | g6 | h6 | a7 | b7 | c7 | d7 | e7 | f7 | g7 | h7 | a8 | b8 | c8 | d8 | e8 | f8 | g8 | h8Вроде бы я правильно понял? Если да, тогда попробую разобраться с таблицей, в чем изначально и был вопрос
Artoodetoo спасибо за помощь.
artoodetoo
Строго говоря, надо менять местами именно циклы, а не упоминание в $arr[$i][$j]. Сейчас твой массив «квадратный», поэтому получилось. Но если бы размерность была другая, ты бы напоролся на ошибку. Подумай об этом, проэкспериментируй и потом приспособь для своей задачи.
Reken
Так получается, что бы повернуть нужную мне таблицу, нужно для начала выгрузить её из MySQL в двумерный массив?
Сейчас она у меня просто в массив выгружается…
artoodetoo
Я об этом написал в первом же комментарии.
— Добавлено —
Надо разделять уровень получения данных и уровень представления.
Вероломство
человек там сознание потерял и в обмороке теперь лежит, прочитав слово — представление
Reken
Никто в обмороке не лежит…Artoodetoo всё по делу написал, я понял решение поставленной задачи, и получилось сделать как мне нужно было.
Похожие записи:
- Advent Of Code 2020, день 1, найдите желаемую сумму и умножьте слагаемые
- Программы C и C ++, позволяющие увеличить время доступа к файлам
- Скрипт для распаковки архивов разного типа
- Проверка типа и срока действия кредитной карты с помощью алгоритма Луна на языке C (CS50)
- Базовый калькулятор графического интерфейса Python с использованием tkinter