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
Форумы портала PHP.SU :: Версия для печати :: вывод массива в цыкле
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » вывод массива в цыкле

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

1. juramaj - 23 Апреля, 2015 - 11:36:33 - перейти к сообщению
Доброго времени суток! Хочу спросить. Например у меня приходит массив вот такого вида
PHP:
скопировать код в буфер обмена
  1. $b = array(
  2.                 0  => Text0,
  3.                 1  => Text1,
  4.                 2  => Text2,
  5.                 3  => Text3,
  6.                 4  => Text4,
  7.                 5  => Text5,
  8.                 6  => Text6,
  9.                 7  => Text7,
  10.                 8  => Text8,
  11.                 9  => Text9,
  12.                 10 => Text10,
  13.                 11 => Text11,
  14.                 12 => Text12,
  15.                 13 => Text13,
  16.                 14 => Text14,
  17.                 15 => Text15
  18.             );

Как мне его вывести на странице в таком виде.
PHP:
скопировать код в буфер обмена
  1.     Text0       Text5         Text10        Text15
  2.             Text1       Text6         Text11
  3.             Text2       Text7         Text12
  4.             Text3       Text8         Text13
  5.             Text4       Text9         Text14

Тоесть сколько б записей в массиве не было, они выводились в четыре столбика. Заранее спасибо.
2. Tyoma5891 - 23 Апреля, 2015 - 11:44:34 - перейти к сообщению
juramaj пишет:
Доброго времени суток! Хочу спросить. Например у меня приходит массив вот такого вида
PHP:
скопировать код в буфер обмена
  1. $b = array(
  2.                 0  => Text0,
  3.                 1  => Text1,
  4.                 2  => Text2,
  5.                 3  => Text3,
  6.                 4  => Text4,
  7.                 5  => Text5,
  8.                 6  => Text6,
  9.                 7  => Text7,
  10.                 8  => Text8,
  11.                 9  => Text9,
  12.                 10 => Text10,
  13.                 11 => Text11,
  14.                 12 => Text12,
  15.                 13 => Text13,
  16.                 14 => Text14,
  17.                 15 => Text15
  18.             );

Как мне его вывести на странице в таком виде.
PHP:
скопировать код в буфер обмена
  1.     Text0       Text5         Text10        Text15
  2.             Text1       Text6         Text11
  3.             Text2       Text7         Text12
  4.             Text3       Text8         Text13
  5.             Text4       Text9         Text14

Тоесть сколько б записей в массиве не было, они выводились в четыре столбика. Заранее спасибо.

разбиваешь массив на 4 части(подмассива) и выводишь себе каждую часть в отдельную колонку в таблице и все..
3. juramaj - 23 Апреля, 2015 - 11:47:31 - перейти к сообщению
ок, спасибо
4. LIME - 23 Апреля, 2015 - 11:49:55 - перейти к сообщению
Tyoma5891 пишет:
разбиваешь массив на 4 части(подмассива) и выводишь себе каждую часть в отдельную колонку в таблице и все..
а по какому правилу стесняюсь спросить надо разбивать?
juramaj к тебе вопрос
(Добавление)
хотя кажется понимаю
разбивай по остатку деления на 4
но тогда они будут разделены равномерно а не подряд как в твоем примере
если надо чтоб шли подряд тупо делишь длину массива на 4
нет..всеже непонятна задача
(Добавление)
Tyoma5891 напиши алгоритм
смещение = длина / 4
от 0 до смещение для i(
вывод текст i ,текст i + смещение, текст i + 2 * смещение, текст i + 3 * смещение
)
5. dcc0 - 23 Апреля, 2015 - 12:33:16 - перейти к сообщению
Да, не то
CUT!
6. LIME - 23 Апреля, 2015 - 12:35:02 - перейти к сообщению
dcc0 ЕПРСТ
ну я же привел псевдокод
целиком по примеру
ну неужели сложно понять?
(Добавление)
dcc0 ПОГОДИ
мысль тоже верная
сори за капс
это я тут пишу между раундами в кс вот и капс оттуда
он там у меня вместо шифта
dcc0 можно скомбинировать
если я ошибаюсь то сорь мужики там уже тероры наседают))
7. dcc0 - 23 Апреля, 2015 - 12:54:55 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $b = array(
  2.                 0  => Text0,
  3.                 1  => Text1,
  4.                 2  => Text2,
  5.                 3  => Text3,
  6.                 4  => Text4,
  7.                 5  => Text5,
  8.                 6  => Text6,
  9.                 7  => Text7,
  10.                 8  => Text8,
  11.                 9  => Text9,
  12.                 10 => Text10,
  13.                 11 => Text11,
  14.                 12 => Text12,
  15.                 13 => Text13,
  16.                 14 => Text14,
  17.                 15 => Text15
  18.             );
  19.                
  20.                         $b=(array_chunk($b, 5));
  21.        
  22.                 for ($i=0; $i < 4; ++$i) {
  23.                 array_splice($b[$i], 1);
  24. }
  25.         print_r($b);


Нет, там было неверно
Можно вынуть первые, только создав. видимо другой массив, а потом воткнуть в него из первого массива, начиная с второго, объединив, но все равно слишком сложно
Вывод
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => Text0
  6.         )
  7.  
  8.     [1] => Array
  9.         (
  10.             [0] => Text5
  11.         )
  12.  
  13.     [2] => Array
  14.         (
  15.             [0] => Text10
  16.         )
  17.  
  18.     [3] => Array
  19.         (
  20.             [0] => Text15
  21.         )
  22.  
  23. )
  24. (
  25.     [0] => Text5
  26. )
  27.  
8. Tyoma5891 - 23 Апреля, 2015 - 12:55:15 - перейти к сообщению
LIME пишет:

Tyoma5891 напиши алгоритм
смещение = длина / 4
от 0 до смещение для i(
вывод текст i ,текст i + смещение, текст i + 2 * смещение, текст i + 3 * смещение
)


а зачем? ведь по сути за нас всю работу делает функция array_chunk, в 3 колонки разбиваем поровну, а в четвертую остаток....
9. LIME - 23 Апреля, 2015 - 13:00:38 - перейти к сообщению
Tyoma5891 пишет:
ведь по сути за нас всю работу делает функция array_chunk
совершенно верно
но теперь надо еще распределить в вложенном цикле по строке
вот сначала сделай
dcc0 аааа блиин
еще раз просмотри мой псевдокод
чанками разбить легко
а вот узнай смещение!!!
тут чанками не обойтись
не все так тривиально как кажется на первый взгляд
мое решение однозначно решает
и кстати я поспешил сказать что чанки решают
чанк только делит массив но никак не задает смещение
еще раз прошу внимательно посмотреть мой алгоритм
(Добавление)
проблема в том чтоб выставить в столбце линейно
думаю это задача от препода))
(Добавление)
LIME пишет:
проблема в том чтоб выставить в столбце линейно
а цикл идет по рядам))
10. exlant - 23 Апреля, 2015 - 13:06:34 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = array(
  3.                 0  => 'Text0',
  4.                 1  => 'Text1',
  5.                 2  => 'Text2',
  6.                 3  => 'Text3',
  7.                 4  => 'Text4',
  8.                 5  => 'Text5',
  9.                 6  => 'Text6',
  10.                 7  => 'Text7',
  11.                 8  => 'Text8',
  12.                 9  => 'Text9',
  13.                 10 => 'Text10',
  14.                 11 => 'Text11',
  15.                 12 => 'Text12',
  16.                 13 => 'Text13',
  17.                 14 => 'Text14',
  18.                 15 => 'Text15'
  19.                
  20.             );
  21.    $count = count($array);
  22.    $num = floor($count/4);
  23.    echo '<table border = "1">';
  24.    for($a = 0, $b = 0, $c = 0; $a < $count; $a++, $c++){
  25.        if($c === 4){
  26.            $c = 0;
  27.            $b++;
  28.        }
  29.        if($a%4 === 0){
  30.            echo '<tr>';
  31.        }
  32.        echo '<td>',$array[$b+($c*$num)],'</td>';
  33.        if(($a+1)%4 === 0){
  34.            echo '</tr>';
  35.        }
  36.        
  37.    }
  38.    echo '</table>';
  39.  

только если массив кратен 4рем, если нет фигня выходит!
11. dcc0 - 23 Апреля, 2015 - 13:16:03 - перейти к сообщению
Вот так можно вынуть, вроде бы нормально, сначала посчитать количество подмассивов, потом объединить или переназначить все в том же цикле верхние массивы
Спойлер (Отобразить)



Вывод
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [0] => Text1
  5.             [1] => Text2
  6.             [2] => Text3
  7.             [3] => Text4
  8.         )
  9.  
  10.     [1] => Array
  11.         (
  12.             [0] => Text6
  13.             [1] => Text7
  14.             [2] => Text8
  15.             [3] => Text9
  16.         )
  17.  
  18.     [2] => Array
  19.         (
  20.             [0] => Text11
  21.             [1] => Text12
  22.             [2] => Text13
  23.             [3] => Text14
  24.         )
  25.  
  26.     [3] => Array
  27.         (
  28.         )
  29.  
  30. )


Деле переназначаем ключи самым верхним массивам
12. Tyoma5891 - 23 Апреля, 2015 - 13:27:40 - перейти к сообщению
все и у нас всегда 4 массива, каждый в свою колонку
13. LIME - 23 Апреля, 2015 - 13:28:42 - перейти к сообщению
Tyoma5891 конечно да
а теперь напиши как оно будет по колонкам расходиться
(Добавление)
офигеть
парень в перерыве между кс быстренько набросал алгоритм однозначно и целиком решающий проблему
ребята вам не стыдно?
уффф
14. dcc0 - 23 Апреля, 2015 - 14:28:24 - перейти к сообщению
Громоздкое решение, но все же
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $b = array(
  4.                 0  => Text0,
  5.                 1  => Text1,
  6.                 2  => Text2,
  7.                 3  => Text3,
  8.                 4  => Text4,
  9.                 5  => Text5,
  10.                 6  => Text6,
  11.                 7  => Text7,
  12.                 8  => Text8,
  13.                 9  => Text9,
  14.                 10 => Text10,
  15.                 11 => Text11,
  16.                 12 => Text12,
  17.                 13 => Text13,
  18.                 14 => Text14,
  19.                 15 => Text15
  20.             );
  21.                
  22.                         $ab=(array_chunk($b, 5));
  23.                   $ac=(array_chunk($b, 5));
  24.        
  25.    for ($i=0; $i < 4; ++$i)                {
  26.                 array_splice($ab[$i], 1);
  27.                 array_shift($ac[$i]);                  
  28. }
  29.      
  30.  
  31. $ii=-5;
  32.    foreach($ac as $k => $v)    {
  33.      
  34.        $ii+=5;
  35.  
  36.       $am[$k]=$ii;         
  37.   }
  38.  
  39.  print_r( array_combine($am, $ac));
  40.  
  41.  
  42.  

(Добавление)
Вывод:

Спойлер (Отобразить)
15. LIME - 23 Апреля, 2015 - 14:32:35 - перейти к сообщению
я даже не стал читать решение
а почему?
плохо читаемое решение есть плохо поддерживаемое решение
мой алгоритм легко читаем и легко понятен
готов выслушать все против
(Добавление)
dcc0 но видимо решение правильное
молоток
(Добавление)
dcc0 могу высказать минусы
если готов выслушать конечно
набралось минусов))

 

Powered by ExBB FM 1.0 RC1