Разобрать массив по кусочкам, хелп((

atrianeas
На сайте с 27.05.2008
Offline
47
1033

Добрый день!

Есть задача, необходимо разобрать массив данных в новый с 24 элементами.

в каждом элементе результата сумма элементов input с шагом в 24, стартовый индекс увеличивается на 1 для каждого последующего элемента.

См подробней конец поста.

Всего в массиве 744 элемента.

вид input массива:

$input[0]=значение

$input[1]=значение

и тп.

надо обработать так чтобы на выходе получилось:

$output[0]=СУММА($input[0]+$input[24]+$input[48]...)

$output[1]=СУММА($input[1]+$input[25]+$input[49]...)

$output[2]=СУММА($input[2]+$input[26]+$input[50]...)

...

$output[23]=СУММА($input[23]+$input[47]+$input[71]...)

У кого нить есть светлые мысли?

Пытаюсь что нить придумать, мозг выпадает с крит еррором =(

AlexVenga
На сайте с 10.04.2007
Offline
190
#1

А в чём проблема то ???

Я щас спать, стукнись ко мне в асю 209442516 после 23 00 по москве, минут за 15 сделаю

Антикризисное предложение: [Бурж, AdSense] [NEW] Сайты - каталоги компаний с гарантией трафа [Дорого] (/ru/forum/1006462)
З
На сайте с 24.04.2008
Offline
54
#2

Наверное проще всего сделать обратный цикл от 743 до 0, где постепенно будут считаться суммы чисел (т.е. куски массива от i до 743).

$output = $input + $input[i+24]

Так придется делать сумму всего лишь двух чисел за итерацию.
Естественно с проверкой на выход за пределы размерности массива.

LiteCat
На сайте с 03.05.2007
Offline
240
#3

for ($i = 0; $i < 24; $i++) {

$output[$i] = 0;

for ($j = 0; $j < 744; $j += 24)

$output[$i] += $input[$i + $j];

}

не тестил

MrPIT
На сайте с 23.07.2008
Offline
44
#4

Если я правильно понял задачу, то вот так:

for ($i=1; $i<=23;$i++)

{
$j = $i;
while ($i<=743)
{
$output[$i] += $input[$j];
$j += 24;
}
}
[Удален]
#5

Ох, быдлокодеры... Не учили в институте что вложенные циклы - зло.


$output=array();
$del=24;
for ($i=0;$i<count($input);$i++)
{
$index=$i%$del;
if ($i>=$del)
$output[$index]+=$input[$i]
else
$output[$index]=$input[$i];
}

При определенных настройках php или при игнорировании ошибок даже условие можно убрать, оставить оттуда только первую клаузу.

DI
На сайте с 03.01.2007
Offline
123
#6

как обычно, в отсутствие ТС (видимо, очень "важная" задача) предлагается с десяток вариантов, потом начинается соревнование в наиболее коротком и элегантном написании кода, а потом приходит ТС, говорит, что задача была совсем другая и разовая, и вообще он все уже на калькуляторе посчитал :D

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
[Удален]
#7
DenIT:
как обычно, в отсутствие ТС (видимо, очень "важная" задача) предлагается с десяток вариантов, потом начинается соревнование в наиболее коротком и элегантном написании кода, а потом приходит ТС, говорит, что задача была совсем другая и разовая, и вообще он все уже на калькуляторе посчитал :D

А что в этом ненормального? ТС явно просит ему помочь. Все и помогают, кто как может. Кто то советом, кто-то кодом, кто-то флудом ;)

atrianeas
На сайте с 27.05.2008
Offline
47
#8

Спасибо всем за ваши варианты, ехал из офиса домой, не мог мониторить темы, сорри =)

задача важная, не разовая и на калькуляторе не считабельна.

DI
На сайте с 03.01.2007
Offline
123
#9
neolord:
А что в этом ненормального?

Дык я и не против совсем, хоть флудом помогу:)

PS: рад, что получилось не как всегда:)

З
На сайте с 24.04.2008
Offline
54
#10


$step = 24;
$output = array();
$cnt = count($input);
for ($i=$cnt-1; $i>=0; $i--)
$output[$i] = ($i+$step>=$cnt ? $input[$i] : $input[$i] + $input[$i+24]);

PS. neolord, в институте также учат, что count() надо считать до цикла for ;)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий