100 | 34 | 65 | 77 | |
33 | 98 | 74 | ||
12 | 99 | |||
11 | 76 | 58 | ||
54 | 65 |
На входе 2-мерный массив, где на месте пустых клеток - нули:
$rows[0] = array(100,34,65,77,0);
$rows[1] = array(0,0,33,98,74);
..
Нужно получить:
$a[0] = array('id' => 100,'parent_id' => 0,'pos' => 0);
$a[1] = array('id' => 34,'parent_id' => 0,'pos' => 1);
$a[2] = array('id' => 11,'parent_id' => 34,'pos' => 1);
....
$a[..] = array('id' => 74,'parent_id' => 0, 'pos' => 4);
$a[..] = array('id' => 58,'parent_id' => 74,'pos' => 0);
$a[..] = array('id' => 65,'parent_id' => 74,'pos' =>1);
Не к спеху, для визуального редактора 2-х уровневого меню
UPD: решено, но кому интересно - засеките время, у меня 6 мин. с отладкой / php
-- матрица на вход
$rows = array(
0 => array(100,34,65,77,0),
1 => array(0,0,33,98,74),
2 => array(0,0,12,99,0),
3 => array(0,11,0,76,58),
4 => array(0,0,54,0,65)
);
-- контроль
March 16 2010, 07:07:57 UTC 2 years ago
March 16 2010, 07:23:58 UTC 2 years ago
March 16 2010, 07:26:08 UTC 2 years ago
March 16 2010, 07:57:03 UTC 2 years ago
Навсегда снимает подобные вопросы. Очень рекомендую, кроме шуток.
March 16 2010, 08:33:06 UTC 2 years ago
$result = [] for($i = 0; $i < sizeof($rows); $i++) { $result[i] = array('id' => 0,'parent_id' => 0,'pos' => 0); for($j = 0; $j < sizeof($rows[i]; $j++) { if($rows[i][j] == 0) { continue; }; if($i > 0) { $result[i]['parent_id'] = $result[i-1]['id']; } else { $result[i]['parent_id'] = 0; }; if($result[i]['id'] == 0) { $result[i]['id'] = $rows[i][j]; }; if($result[i]['pos'] == 0) { $result[i]['pos'] = $j; }; }; };March 16 2010, 08:34:08 UTC 2 years ago
March 16 2010, 08:45:17 UTC 2 years ago
кстати ==== твой алг. вобще не правильный
March 16 2010, 08:54:25 UTC 2 years ago