русский
Germany.ruForen → Архив Досок→ Webdesign und Hosting

Делаю тестовое задание

25.09.14 22:20
Re: Делаю тестовое задание
 
  Posmotrim знакомое лицо
Posmotrim
in Antwort miltorg 25.09.14 21:55
так его не искать, нужно, а реализовать :)
вот держи, с минимальной оптимизацией. допилишь, если нужно:
public function actionTest()
{
//вот тут сделаешь чтение посредством mysqli, как тебе нужно в задании
//я для теста посредством yii загнал все записи в массив ассоциативных массивов
$cmd = Yii::app()->db->createCommand("select * from table1");
$items = $cmd->queryAll(true);

$helper = new SumCalculator($items);

foreach($items as $item)
{
echo "{$item['id']}\t{$item['parent_id']}\t{$item['name']}\t{$item['value']}\t";
echo $helper->calc($item['id']) . "
\n";
}
}


ну и сам расчёт с минимальной оптимизацией

class SumCalculator
{
private $sums = [];
private $key2val = [];//словарь (ключ => значение)
private $children = []; //словарь (ключ => [child1, child2, ...])
function SumCalculator($items)
{
foreach($items as $item)
{
$this->key2val[$item['id']] = $item['value'];
if($item['parent_id'] != 0)
{
$this->children[$item['parent_id']][] = $item['id'];
}
}
}

public function calc($id)
{
if(!isset($this->sums[$id]))
{
$sum = $this->key2val[$id];
if(isset($this->children[$id]))
{
foreach($this->children[$id] as $child_id)
{
$sum += $this->calc($child_id);
}
}
$this->sums[$id] = $sum;
}
return $this->sums[$id];
}
}


 

Sprung zu