shuchkin ([info]shuchkin) wrote in [info]ru_webdev,

Задачка: Таблица -> структура (дерево)

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)
);
-- контроль


  • Post a new comment

    Error

    Your reply will be screened

  • 8 comments

[info]nigative

March 16 2010, 07:07:57 UTC 2 years ago

одобряю, приступай.

[info]mpak666

March 16 2010, 07:23:58 UTC 2 years ago

и? а чего сложного обойти матрицу-то в два цикла, тут и институтской вышки не надо... гыык

[info]mpak666

March 16 2010, 07:26:08 UTC 2 years ago

гык :) всё понял, вниз идём-с

[info]fergus_macdubh

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;
  };
 };
};

[info]fergus_macdubh

March 16 2010, 08:34:08 UTC 2 years ago

Епта, и нахера ты сюда писал, если сам можешь решить это за шесть минут? Пиздец.

[info]shuchkin

March 16 2010, 08:45:17 UTC 2 years ago

Епта, просто мозг засрат был, пока не написал не знал с какой стороны подойти
кстати ==== твой алг. вобще не правильный

[info]fergus_macdubh

March 16 2010, 08:54:25 UTC 2 years ago

Почему неправильный?
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…