Проблемы с сортировкой массива

Pegas

Новичок
Проблемы с сортировкой массива

Есть массив выбранный из БД примерно следующего вида:
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;  
  }
$start=0. Все работает пока $end<871. При $end>=871 повидимому перестает работать функция. возможно из-за длительности обработки.
Подскажите как поправить эту проблему - переписать функу или увеличить время обработки? Если переписать, то у самого идей как переписать функу больше нет, поэтому буду благодарен за помощь. А если время обработки увеличивать, подскажите где изменить число?
ЗЫ. пробовал увеличить в php.ini max_execution_time с 30 до 120 сек - не помогает.
 

bgm

&nbsp;
А чем вызвана именно такая структура конечного массива?
 

Pegas

Новичок
имхо построение таблицы удобнее
inv_num | name | month | year| day1 | day2 | ... | day31
 

Pegas

Новичок
мыслей не хватило. нашел решение на пхп и не чаял ошибку увидеть...ведь не буду же я для теста более 870 строк вбивать
 

bgm

&nbsp;
Может тебе на этапе выборки сразу сделать сортировку по инвентарному номеру, году, месяцу и дню?
 

Pegas

Новичок
дело в том что в БД они храняться в след. виде:
inv_num, name, month, year, day, note
т.е. строка за 1 день
 

bgm

&nbsp;
Немного непонятно: у тебя есть ключи массива day1, day2 и т.д, откуда берутся такие ключи? не из базы же?
 

Pegas

Новичок
да, это одно поле:
id, inv_num, name, day, month, year, day, condition, note
заранее предполагаю ответ, что моя БД неправильно организована. и поверьте я тоже об этом подумывать начал. просто писал функу давно, знаний и мыслей поменьше было...
 

Pegas

Новичок
спасибо. переделаю. но всетаки подскажите, может у вас есть мысли, в чем раньше то ошибка была?просто на будующее нужно знать
 

Фанат

oncle terrible
Команда форума
лично я не встречал пока людей, которые могут интерпретировать в уме две страницы пхп-кода.
с пошаговой отладкой.
поэтому, если ты хочешь узнать, в чём ошибка, тебе придётся сделать это с помощью своего пхп.
 

Pegas

Новичок
проверял. ошибок пхп не выдает. просто повисает вывод в браузере результатов. я понимаю что это сложно, точнее невозможно :) в голове код обработать построчно, мне нужно хотя бы знать за что зацепиться мыслью. может я вообще не там ищу.
 

bgm

&nbsp;
Переделывать. И базу (явно). И скрипты.
А вообще, ситуация такая: есть некая задача, на этапе проектирования были фатальные ошибки, значит надо вернуться на этап проектирования и думать, думать, думать.

P.S. Дела, дела, дела...
 

Pegas

Новичок
ошибок не было в том то и дело. скорость обработки устраивала. все было отл., но я работал не боле чем с 10-20 забитыми строками с различными данными.

-~{}~ 22.03.06 14:27:

ладно. свою новую задачу я понял. просто если будут мысли по поводу проблемы не затрудните себя поделиться, хотя бы ради интереса...спасибо за участие и помощь.
 
Сверху