Forum Webscript.Ru

Программирование => PHP => Тема начата: Ray007 от 24 Октября 2007, 21:30:03

Название: Обработка данных
Отправлено: Ray007 от 24 Октября 2007, 21:30:03
Подскажите элегантный способ обработки вот таких данных:


firma=9 tovar=7 kolvo=2.00
firma=10 tovar=108 kolvo=1.00
firma=10 tovar=119 kolvo=5.00
firma=10 tovar=82 kolvo=4.00
firma=14 tovar=24 kolvo=5.00
firma=14 tovar=119 kolvo=3.00
firma=14 tovar=108 kolvo=1.00
firma=14 tovar=119 kolvo=5.00
firma=14 tovar=82 kolvo=4.00
firma=14 tovar=49 kolvo=8.00
 

Вводятся/выводятся только значения.

Надо:
1.по каждому полю firma оптимизировать: поля tovar с одинаковым номером объединить, kolvo у них сложить
2.вычислить общее количества товаров с одинаковым номером tovar по всем полям firma
3.вывести в виде таблицы, где столбцы - значения firma, строки - значения tovar, на их пересечении - kolvo

Т.е. на входе имеем такую таблицу:


9     7   2.00
10  108   1.00
10  119   5.00
10   82   4.00
14   24   5.00
14  119   3.00
14  108   1.00
14  119   5.00
14   82   4.00
14   49   8.00


А на выходе должна получиться вот такая:


_____9 10 14  S
007  2        2
108     1  1  3
119     5  8 13
082     4  4  8
024        5  5
108
049        8  8
 

Есть ли простой способ сделать это php ?
:confused:
Название: Обработка данных
Отправлено: html_coder от 25 Октября 2007, 12:06:12
Ray007, к сожалению нет ни слова о том, где храняться эти данные...
Название: Обработка данных
Отправлено: Altaxar от 25 Октября 2007, 13:11:38
Да можно, и не сложно, а вот у тебя даже в ручную таблица с 2 ошибками :-)


$mas=array();
$mas[]=array(\'firma\'=>9,\'tovar\'=>7,\'kolvo\'=>2.00);
$mas[]=array(\'firma\'=>10,\'tovar\'=>108,\'kolvo\'=>1.00);
$mas[]=array(\'firma\'=>10,\'tovar\'=>119,\'kolvo\'=>5.00);
$mas[]=array(\'firma\'=>10,\'tovar\'=>82,\'kolvo\'=>4.00);
$mas[]=array(\'firma\'=>14,\'tovar\'=>24,\'kolvo\'=>5.00);
$mas[]=array(\'firma\'=>14,\'tovar\'=>108,\'kolvo\'=>1.00);
.....

$mas2=array(array(0=>\'__\'));
$mas3=array(\'s\');
$max=0;
foreach($mas as $val){
if(!isset($mas2[0][$val[\'firma\']]))
$mas2[0][$val[\'firma\']]=$val[\'firma\'];
if(!isset($mas3[$val[\'tovar\']]))
$mas3[$val[\'tovar\']]=$val[\'kolvo\'];
else
$mas3[$val[\'tovar\']]+=$val[\'kolvo\'];
$mas2[$val[\'tovar\']][0]=$val[\'tovar\'];
        $mas2[$val[\'tovar\']][$val[\'firma\']]=$val[\'kolvo\'];
if(($l=strlen($val[\'tovar\']))>$max) $max=$l;
}

ksort($mas2[0]);
$s=\'\';
foreach($mas2 as $key => $val){
$s.=\'\';
foreach($mas2[0] as $key2 => $val2){
if(($key2==0) && ($key!=0))
$val[$key2]=str_pad($val[$key2], $max, \'0\', STR_PAD_LEFT);
$s.=\'\';
}

$s.=\'\';
}
$s.=\'
\'.(isset($val[$key2])?$val[$key2]:\' \').\' \'.$mas3[$key].\'
\';
echo $s;
Название: Обработка данных
Отправлено: Altaxar от 25 Октября 2007, 13:15:24
html_coder
Даже если и в базе данных, то подобное будет весьма интересно сделать к примеру на MySQL