Создание массива дерева или подмассива

#php #arrays #treeview

#php #массивы #просмотр дерева

Вопрос:

Это данные в том виде, в каком они есть в таблице mysql

Таблица A (задачи)

 task_id | name  | description
-----------------------------
  1     | soccer|  fora
-----------------------------
  2     | sussam|  forb
-----------------------------
  3     | sosssi|  forc
-----------------------------
  4     | sillly|  ford
  

Этапы табуляции B

 mile_id | name   | task_id
------------------
  1     | task1mi |   1 
------------------
  2     | task2mi |   1
-------------------
  3     | task3mi |   3
  

Я хочу создать массив дерева, что-то вроде для каждой задачи в качестве родительской вехи в качестве дочернего массива идентификатора задачи.

Что должна возвращать функция print_r() (желаемый результат с помощью php после запроса mysql)

    array(          
          name=>'soccer',
          description =>'fora'
          task_id=>array(
                  mile_id=>'1',
                  name=>'task1mi'                   
             )
          )
  

Любые предложения

Комментарии:

1. это чистые массивы или таблицы mysql?

2. Исходя из того, что mysql возвращает с помощью php, я хочу построить дерево массива из результатов mysql

3. почему вы не используете объединения или вложенные запросы вместо того, чтобы возвращать массивы, а затем преобразовывать их в другое представление!

Ответ №1:

Вы можете сделать это следующим образом, но это плохо сказывается на производительности. Я не знаю точных требований, и вы используете резьбу. Итак, я даю основную идею.

 $sqlparent = "select * from tasks";// get your task details from database.
$parentData = $sqlparent;// result from sql function.
foreach($parentData as $key=>$value)
{
   $sql = "select * from Milestones where task_id='".$value['task_id']."'";// find the Milestones of the task
$milestonesResult = mysql_featch_array($sql); // run sql and get data from database it is giving you single record you need to create loop here. as i don`t know what are you using for PHP.
$value['milestoneslist'] = $milestonesResult; //task_id=>array( here you can not use task_id => array as it is already there. if you do it it will over-right the task_id
}
  

Я надеюсь, что вы получите представление об этом.

Ответ №2:

Вы можете использовать приведенный ниже код для своего решения, как я и думал

 $sql = "select table_b.*,table_a.name as aname, table_a.description as description as aname from table_b left join table_a on table_b.task_id=table_a.task_id"
$result = mysql_query($sql);

//based on above query result you will get array on mysql_fatch_assoc

$result_array = array();
while($result = mysql_fatch_assoc($result)){
    $tmp_arr = array();
    $tmp_arr['mile_id'] =  $result['mile_id'];
    $tmp_arr['name'] =  $result['name'];

    $result_array[$result['task_id']]['name'] = $result['aname'];
    $result_array[$result['task_id']]['description'] = $result['description'];
    $result_array[$result['task_id']]['task_id'][] = $tmp_arr;
}


$result_array = array_values($result_array);
print_r($result_array);