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]   

> Описание: С уменьшением колва элементов
etoYA
Отправлено: 20 Августа, 2015 - 04:08:47
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




Всем привет, подскажите как мне разбить массив, с учетом того, что кол-во элеменов в массиве неизвестно.

Допустим есть массив из n элементов, мне нужно построить подобное:

PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2.         array('1'),
  3.         array('2'),
  4.         array('3'),
  5.         array('4'),
  6.         array('5'),
  7.         array('6')
  8. );
  9.  
  10. array_slice($arr, 0, 3);
  11. array_slice($arr, 3, 2);
  12. array_slice($arr, 5);


Т.е в первой колонке элементов всегда на 1 больше, чем во второй, во второй колонке, всегда на 1 больше, чем в 3.

(Отредактировано автором: 20 Августа, 2015 - 04:09:38)

 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Августа, 2015 - 09:37:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




CODE (link):
скопировать код в буфер обмена
 
 Top
etoYA
Отправлено: 20 Августа, 2015 - 16:00:43
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




DeepVarvar, беда=) Буду разбираться, спасибо за ссылку
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Августа, 2015 - 16:07:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Там тебе даже формулу написали, где можно значение любого n-члена получить.
 
 Top
etoYA
Отправлено: 20 Августа, 2015 - 16:12:17
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




DeepVarvar, да, я видел, буду вникать, ибо в математике я не айс=) Но, разберусь в любом случае;)
 
 Top
Panoptik
Отправлено: 21 Августа, 2015 - 12:05:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




а как будет выглядеть результат по вашему если количество элементов в массиве не будет равно сумме прогрессии?
к примеру в приведенном варианте 6 - отлично подходит как 3 + 2 + 1,
но как будет выглядеть результат для 7,8,9,11 значений?


-----
Just do it
 
 Top
DeepVarvar Супермодератор
Отправлено: 21 Августа, 2015 - 14:11:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Ну либо сдвигать кол-во чанков к размеру массива, либо забивать на последний не заполненый чанк.
 
 Top
etoYA
Отправлено: 21 Августа, 2015 - 15:16:45
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




Panoptik,

3,2,2 = 7
3, 3, 2 = 8
4,3,2 = 9
4, 4, 3 = 11

как то так наверное=)

Я, честно говоря с этим и запарился.

(Отредактировано автором: 21 Августа, 2015 - 15:18:05)

 
 Top
Sail
Отправлено: 21 Августа, 2015 - 15:49:44
Post Id



Участник


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


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




etoYA пишет:
3,2,2 = 7
3, 3, 2 = 8
4,3,2 = 9
4, 4, 3 = 11

как то так наверное=)

Вот, один из вариантов:
PHP:
скопировать код в буфер обмена
  1. $N = 8;
  2. $M = 3;
  3. $arr = array();
  4. while($M > 0) {
  5.     $Z = (int)($N/$M);
  6.     $N = $N - $Z;
  7.     array_unshift($arr, $Z);
  8.     $M--;
  9. }
  10. var_dump($arr);
  11.  

(Добавление)
Однако, на случай равенства всех надо ещё доработать... Улыбка
 
 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