Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод массива в таблицу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Моська
Отправлено: 27 Марта, 2015 - 02:43:13
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




Здравствуйте форумчане!
Возник вопрос имеется массив и таблица.

PHP:
скопировать код в буфер обмена
  1. $Array= array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', ...);
  2.  $x = 7; //Число строк меняется
  3.  $main='<table border=1>';
  4. for ($i=0; $i<$x; $i++) {
  5.     $main.='<tr>';
  6.     foreach($Array as $chislo) {
  7.        $main.='<td>'.$chislo.'</td>';
  8.    }
  9.    $main.='</tr>';
  10.  }
  11.   $main.='</table>';


Вопрос! Как разбить массив по 5 элементов и первые пять вставить в первую строку таблицы, вторые 5 во вторую и т.д. Огорчение
 
 Top
GoDr
Отправлено: 27 Марта, 2015 - 07:59:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




PHP:
скопировать код в буфер обмена
  1. // количество столбцов
  2. $col = 4;
  3.  
  4. // результат
  5. $result = array();
  6.  
  7. // массив с данными
  8. $array = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10');
  9.  
  10. // заодно сразу посчитаем сколько у нас там значений
  11. $array_count = sizeof($array);
  12.  
  13. // позиция ячейки
  14. $i = $col;
  15.  
  16. // листаем массив
  17. foreach ($array as $key => $value) {
  18.  
  19.     // уменьшаем позицию ячейки
  20.     $i--;
  21.  
  22.     // создаём ячейку
  23.     $result[] = '<td>' . $value . '</td>';
  24.  
  25.     // проверяем, а не конец ли ячейки и не закончился ли массив
  26.     if ($i == 0 and $key != ($array_count - 1)) {
  27.  
  28.         // Добавляем разделитель
  29.         $result[] = '</tr><tr>';
  30.  
  31.         // "обнуляем" счётчик позиции
  32.         $i = $col;
  33.     }
  34.  
  35. }
  36.  
  37. // дополняем строку пустыми ячейками
  38. if ($i) {
  39.     $result = array_merge($result, array_fill($array_count, $i, '<td> + </td>'));
  40. }
  41.  
  42. // проверяем есть ли вообще что-нибудь в таблице
  43. if ($result) {
  44.  
  45.     // и завершаем таблицу
  46.     array_unshift($result, '<table border="1"><tr>');
  47.     $result[] = '</tr></table>';
  48. }
  49.  
  50. // выводим результ
  51. echo implode('', $result);

(Добавление)
ах, ну да, забыл учитывать количество строк.... Радость

PHP:
скопировать код в буфер обмена
  1. // количество столбцов
  2. $col = 3;
  3.  
  4. // количество строк
  5. $row = 3;
  6.  
  7. // результат
  8. $result = array();
  9.  
  10. // массив с данными
  11. $array = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10');
  12.  
  13. // заодно сразу посчитаем сколько у нас там значений
  14. $array_count = sizeof($array);
  15.  
  16. // позиция ячейки
  17. $i = $col;
  18. $y = $row;
  19.  
  20. // листаем массив
  21. foreach ($array as $key => $value) {
  22.  
  23.     // уменьшаем позицию ячейки
  24.     $i--;
  25.  
  26.     // создаём ячейку
  27.     $result[] = '<td>' . $value . '</td>';
  28.  
  29.     // проверяем, а не конец ли ячейки и не закончился ли массив
  30.     if ($i == 0 and $key != ($array_count - 1)) {
  31.  
  32.         // Проверяем сколько строк уже выведено
  33.         $y--;
  34.         if($y==0){
  35.             break;
  36.         }
  37.  
  38.         // Добавляем разделитель
  39.         $result[] = '</tr><tr>';
  40.  
  41.         // "обнуляем" счётчик позиции
  42.         $i = $col;
  43.     }
  44.  
  45. }
  46.  
  47. // дополняем строку пустыми ячейками
  48. if ($i) {
  49.     $result = array_merge($result, array_fill($array_count, $i, '<td> + </td>'));
  50. }
  51.  
  52. // проверяем есть ли вообще что-нибудь в таблице
  53. if ($result) {
  54.  
  55.     // и завершаем таблицу
  56.     array_unshift($result, '<table border="1"><tr>');
  57.     $result[] = '</tr></table>';
  58. }
  59.  
  60. // выводим результ
  61. echo implode('', $result);


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Faraon-san
Отправлено: 27 Марта, 2015 - 14:23:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. // Массив данных
  3. $array = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13');
  4. // Количество ячеек в стоке
  5. $col = 5;
  6. $i = 0;
  7.  
  8. $data = '<table><tbody><tr>';
  9.  
  10. foreach($array as $value)
  11. {
  12.         if($i % $col == 0)
  13.         {
  14.                 $data .= '</tr><tr>';
  15.                 $i = 0;
  16.         }
  17.  
  18.         $data .= '<td>'.$value.'</td>';
  19.         $i++;
  20. }
  21. for(;$i < $col; $i++)
  22. {
  23.         $data .= '<td>пусто</td>';
  24. }
  25.  
  26. $data .= '</tr></tbody></table>';
  27.  
  28. echo $data;
  29.  

(Отредактировано автором: 27 Марта, 2015 - 14:25:45)

 
 Top
GoDr
Отправлено: 27 Марта, 2015 - 14:44:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Faraon-san, есть небольшие 3 проблемы Улыбка

1. Не учитываешь заданное количество строк.

2. Если массив пустой, то ты получишь пустую таблицу. Получается что в массиве в данном случае пять пустых значений, а он пуст
CODE (html):
скопировать код в буфер обмена
  1. <table>
  2.     <tbody>
  3.     <tr>
  4.         <td>пусто</td>
  5.         <td>пусто</td>
  6.         <td>пусто</td>
  7.         <td>пусто</td>
  8.         <td>пусто</td>
  9.     </tr>
  10.     </tbody>
  11. </table>


3. А если в массиве что-то есть, то ты получишь первую строку без ячеек
CODE (html):
скопировать код в буфер обмена
  1. <table>
  2.     <tbody>
  3.     <tr></tr>
  4.     <tr>
  5.         <td>1</td>
  6.         <td>2</td>
  7.         <td>3</td>
  8.         <td>4</td>
  9.         <td>5</td>
  10.     </tr>
  11. .....

Хорошо

(Отредактировано автором: 27 Марта, 2015 - 14:45:12)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
Faraon-san
Отправлено: 27 Марта, 2015 - 15:02:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




писал на скорую руку, даже не проверил
про строки он автор поста не просил
тогда вот как то так:
PHP:
скопировать код в буфер обмена
  1. // Массив данных
  2. $array = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13');
  3. // Количество ячеек в стоке
  4. $col = 5;
  5. $i = 0;
  6.  
  7. $data = '<table><tbody><tr>';
  8.  
  9. foreach($array as $value)
  10. {
  11.         $data .= '<td>'.$value.'</td>';
  12.         $i++;
  13.  
  14.         if($i % $col == 0)
  15.         {
  16.                 $data .= '</tr><tr>';
  17.                 $i = 0;
  18.         }
  19. }
  20.  
  21. if(!count($array))
  22. {
  23.         $i = $col;
  24. }
  25. for(;$i < $col; $i++)
  26. {
  27.         $data .= '<td>пусто</td>';
  28. }
  29.  
  30. $data .= '</tr></tbody></table>';
  31.  
  32. echo $data;

(Отредактировано автором: 27 Марта, 2015 - 15:04:04)

 
 Top
GoDr
Отправлено: 27 Марта, 2015 - 15:05:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Faraon-san, и что? Условие задачи всё равно не выполнил. И зачем выкладывать код если ты его даже не проверил? Сходу же видно что он не валидный


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Faraon-san
Отправлено: 27 Марта, 2015 - 15:09:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




какие были условия задачи?
поконкретнее пожалуйста, где он не валидный?
И автор поста не просил его написать, он спросил как это реализовать
Если я где то не прав, поправьте.
 
 Top
GoDr
Отправлено: 27 Марта, 2015 - 15:22:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




так я вроде всё сказал выше... из трёх пунктов ты поправил только один

в коде в вопросе есть такая строчка
PHP:
скопировать код в буфер обмена
  1. $x = 7; //Число строк меняется

Я не знаю что имел точно автор, но "строка" это не столбец"

Это раз. А два... если массив будет пуст, то будет этот код
CODE (html):
скопировать код в буфер обмена
  1. <table><tbody><tr></tr></tbody></table>

и он совершенно не валидный


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Faraon-san
Отправлено: 27 Марта, 2015 - 15:38:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




если автору потребуется ограничение и на строки, то я подскажу как это сделать.
 
 Top
GoDr
Отправлено: 27 Марта, 2015 - 15:43:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Faraon-san, думаю всё понятно.. твой код идеален, да и ты прав Радость


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB