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 » » Вопросы новичков » Переборка массива

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

1. etoYA - 02 Декабря, 2011 - 07:58:00 - перейти к сообщению
Сейчас парюсь, пробую написать скрипт переборки массива, но что-то не получается...

Подкиньте идейку(пока не код). Допустим массив содержит 15 строк, нужно разделить это кол-во строк на 3 и вывести в 3 разных блокахУлыбка).
(Добавление)
P.S пока получилось вывести:

1
2
3
4
5

1
2
...........
10

1
2
...........
15
2. EuGen - 02 Декабря, 2011 - 08:01:40 - перейти к сообщению
3. DeepVarvar - 02 Декабря, 2011 - 08:15:07 - перейти к сообщению
Если вопрос относится к этой: http://forum.php.su/topic.php?fo...03643#1322803643 теме из раздела хтмл, как вывести в блоке три колонки, то никаких чанков не нужно.
Идея:
4. EuGen - 02 Декабря, 2011 - 08:26:42 - перейти к сообщению
DeepVarvar пишет:
if ($i%3 == 0) ...

Идея

Но, может, проблема все же именно в разбиении, а не выводе.
5. Самогонщик - 02 Декабря, 2011 - 08:37:14 - перейти к сообщению
EuGen пишет:
if(!$i%3)
Это сильно сурово, в том смысле что читать в итоге будет неудобно.
6. EuGen - 02 Декабря, 2011 - 08:39:03 - перейти к сообщению
Чем же неудобно? Всего лишь два оператора. Довольно часто такие конструкции используются, никогда не замечал неудобств ни в своем, ни в чужом коде.
7. etoYA - 02 Декабря, 2011 - 08:46:42 - перейти к сообщению
что-то не догоняю Ниндзя
8. Самогонщик - 02 Декабря, 2011 - 08:52:07 - перейти к сообщению
EuGen пишет:
Чем же неудобно?
Выглядит как набор спецсимволов, на вкус и цвет... но такой паттерн ($i%3 == 0) даже внимания не задерживает, точно понятно что хотел сказать автор.
9. EuGen - 02 Декабря, 2011 - 08:52:33 - перейти к сообщению
etoYA пишет:
что-то не

Может, тогда и правда неудобно.
Есть два варианта. Если Вам нужно разбить массив, то делаете это с помощью array_chunk, получая требуемое разбиение.
Если же задача просто в выводе, то достаточно:
PHP:
скопировать код в буфер обмена
  1. $rgData=array(
  2. 'string_0',
  3. 'string_1',
  4. 'string_2',
  5. 'string_3',
  6. 'string_4',
  7. 'string_5',
  8. 'string_6',
  9. 'string_7',
  10. 'string_8',
  11. 'string_9');
  12. for($i=1; $i<=count($rgData);$i++)
  13. {
  14.    echo($rgData[$i-1].($i%3?" ":"\n"));
  15. }


Самогонщик пишет:
но такой паттерн ($i%3 == 0) даже внимания не задерживает

Может, это уже привычка, или опыт прочтения/изучения кода, но то выражение, что я привел, тоже ничуть не задерживает моего внимания. Ну да ладно, действительно - на вкус и цвет.
10. Panoptik - 02 Декабря, 2011 - 08:58:01 - перейти к сообщению
элементарно Ватсон!

PHP:
скопировать код в буфер обмена
  1.  
  2. // ($i%3 == 0) == (!$i%3)
  3. var $arr =  (0,1,6,5,9,7,8,1,3,1,2,3,1,2,4,5);
  4. print "<div>";
  5. for($i=0;$i<count($arr);$i++) {
  6.   if(!$i%3 || !$i) {
  7.    echo $arr[$i];
  8.   } else {
  9.    print "</div><div>";
  10.    echo $arr[$i];
  11.   }
  12. }
  13. print "</div>";
  14.  
  15.  
11. etoYA - 02 Декабря, 2011 - 09:00:17 - перейти к сообщению
Что-то не понял, делал я с чанком, но у меня не получилось вывести все в 3 блока, если не известно кол-во строк в массиве. Могу вывести по * строк на блок, но сколько будет блоков.......

В общем мне нужно все строки массива вывести в 3 блока.
12. EuGen - 02 Декабря, 2011 - 09:02:57 - перейти к сообщению
Вот Вам выше уже привели два варианта. Мой - на "подумать" (как Вы и просили) - как его модифицировать, чтобы форматирование нужное было (по сути столбцы в моем примере разделены пробелами, строки - переносами строк)
13. etoYA - 02 Декабря, 2011 - 09:06:29 - перейти к сообщению
Вот мой вариант, но как и говорит, в нем эта проблема... Выводит по 3 строки в строку...
PHP:
скопировать код в буфер обмена
  1. <?
  2. $array[] = '01. blablablabla<br/>';
  3. $array[] = '02. blablablabla<br/>';
  4. $array[] = '03. blablablabla<br/>';
  5. $array[] = '04. blablablabla<br/>';
  6. $array[] = '05. blablablabla<br/>';
  7. $array[] = '06. blablablabla<br/>';
  8. $array[] = '07. blablablabla<br/>';
  9. $array[] = '08. blablablabla<br/>';
  10. $array[] = '09. blablablabla<br/>';
  11. $array[] = '10. blablablabla<br/>';
  12. $array[] = '11. blablablabla<br/>';
  13. $array[] = '12. blablablabla<br/>';
  14. $array[] = '13. blablablabla<br/>';
  15. $array[] = '14. blablablabla<br/>';
  16. $array[] = '15. blablablabla<br/>';
  17. $arr = (array_chunk($array, 3));
  18. for($i=0; $i < count($arr); $i++) {
  19.     for($x=0; $x < count($arr[$i]); $x++) {
  20.         echo $arr[$i][$x];    
  21.     }
  22.     echo '</br>';
  23. }
  24. ?>
14. Panoptik - 02 Декабря, 2011 - 09:07:32 - перейти к сообщению
вот с чанком:
PHP:
скопировать код в буфер обмена
  1.  
  2. var $arr =  (0,1,6,5,9,7,8,1,3,1,2,3,1,2,4,5);
  3. var $newarr = array_chunk($arr,3);
  4. foreach($newarr as $val) {
  5.  print "<block>";
  6.   foreach($val as $subval) {
  7.     print $subval;
  8.   }
  9.  print "</block>";
  10. }
  11.  
15. etoYA - 02 Декабря, 2011 - 09:10:24 - перейти к сообщению
Panoptik, у меня написано немного подругому, но эффект тот же... Выводит по 3 строки в 1блок, а не все строки разделить на 3, и эти части вевести в каждый блок...

 

Powered by ExBB FM 1.0 RC1