Pegas
Новичок
Проблемы с сортировкой массива
Есть массив выбранный из БД примерно следующего вида:
Требуется получить массив следующего вида:
Написал такую функу для обработки исходного массива:
$start=0. Все работает пока $end<871. При $end>=871 повидимому перестает работать функция. возможно из-за длительности обработки.
Подскажите как поправить эту проблему - переписать функу или увеличить время обработки? Если переписать, то у самого идей как переписать функу больше нет, поэтому буду благодарен за помощь. А если время обработки увеличивать, подскажите где изменить число?
ЗЫ. пробовал увеличить в php.ini max_execution_time с 30 до 120 сек - не помогает.
Есть массив выбранный из БД примерно следующего вида:
PHP:
Array
(
[0] => Array
(
[inv_num] => 176
[name] => Экскаватор ЭО-5124
[month] => Март
[year] => 2006
[day1] => В ремонте
[note1] => База г. Россошь
)
[1] => Array
(
[inv_num] => 176
[name] => Экскаватор ЭО-5124
[month] => Март
[year] => 2006
[day2] => В ремонте
[note2] => База г. Россошь
)
[2] => Array
(
[inv_num] => 551
[name] => Баровая машина БГМ-7
[month] => Март
[year] => 2006
[day1] => В ремонте
[note1] => База г. Россошь
)
PHP:
Array
(
[0] => Array
(
[inv_num] => 176
[name] => Экскаватор ЭО-5124
[month] => Март
[year] => 2006
[day1] => В ремонте
[note1] => Дорожная,6
[day2] => В ремонте
[note2] => Дорожная,6
[day3] => Простой
[note3] => Дорожная,6
[day6] => Простой
[note6] => Дорожная,6
[day7] => Простой
[note7] => Дорожная,6
[day9] => Простой
[note9] => Дорожная,6
[day10] => Простой
[note10] => Дорожная,6
[day13] => В ремонте
[note13] => Дорожная,6
[day14] => В ремонте
[note14] => Дорожная,6
[day15] => В ремонте
[note15] => Дорожная,6
[day16] => Простой
[note16] => Дорожная,6
[day17] => Простой
[note17] => Дорожная,6
)
PHP:
function aaa($array, $start, $end)
{
static $n=0, $out, $t=0, $n_key;
if ($start<$end)
{
for ($i=0; $i<$end; $i++)
{
if ($array[$start]['inv_num']==$array[$i]['inv_num'])
{
//echo "<br>start=".$start."<br>";
//echo "compare array1:<br>";
//print_r($array[$start]);
//echo "<br>i=".$i."<br>";
//echo "compare array2:<br>";
//print_r($array[$i]);
$n++;
if (isset($n_key))
{
foreach ($n_key as $key=>$value)
{
if ($array[$i]['inv_num']==$out[$value]['inv_num'])
{
$out[$value]=array_merge($out[$value], $array[$i]);
//echo "<br>out array:<br>";
//print_r($out);
//echo "<br>key out array:<br>";
//print_r($n_key);
$t++;
}
}
}
//echo "<br>n=".$n."<br>";
//echo "t=".$t;
if ($t==0)
{
$out[$n]=array_merge($array[$start], $array[$i]);
$n_key[$n]=$n;
sort($n_key);
//echo "<br>OUT ARRAY:<br>";
//print_r($out);
//echo "<br>KEY OUT ARRAY:<br>";
//print_r($n_key);
}
}
}
$t=0;
$start++;
//echo "<br>-----<br>";
aaa($array, $start, $end);
}
sort($out);
return $out;
}
Подскажите как поправить эту проблему - переписать функу или увеличить время обработки? Если переписать, то у самого идей как переписать функу больше нет, поэтому буду благодарен за помощь. А если время обработки увеличивать, подскажите где изменить число?
ЗЫ. пробовал увеличить в php.ini max_execution_time с 30 до 120 сек - не помогает.
в голове код обработать построчно, мне нужно хотя бы знать за что зацепиться мыслью. может я вообще не там ищу.