高效的数据库查询(PHP + PDO SQL)

时间:2017-04-05 11:47:32

标签: php multidimensional-array

目前我有这样的数据库结构:

| id | name            | parent_id
| 1  | Human Resources | 0
| 2  | Marketing       | 0
| 3  | Operations      | 0
| 4  | Design          | 0
| 5  | Marketing Design| 4
| 6  | Graphic Design  | 4
| 7  | Print Design    | 4
| 8  | Human Personal  | 1
| 9  | Food Ops        | 3

正如您所看到的,这些是业务部门和子部门。

子部门 parent_id 部门的ID

做,例如:

  

id:4,name:Design,parent_id:0

     

id:7,打印设计,parent_id:4

     

印刷设计是设计的子部门

我在一个查询中调用了数据库中的所有内容,现在我需要在这个结构中使用它们:

$depts = array(
   "Human Resources" => array("Human Personal"),
   "Marketing" => array(),
   "Operations" => array("Food Ops"),
   "Design" => array("Marketing Design", "Graphic Design", "Print Design"),
   ...
);
到目前为止,我有:

 foreach ($results as $result) {

    if ($result['parent_id'] == 0) {
        $parentCategories_arr[array($result['id'] => $result['name'])];
    } else {
        $returnedResults_arr[$result['parent_id']] = array($result['name']);
    }
}

然而,我完全认为我错过了这一点。所以我的问题:

如何遍历该结果的所有内容并将父类别添加到数组中,并将其子类别作为数组?

1 个答案:

答案 0 :(得分:1)

也许有一种更简单的方法,但它有效:(讨厌说句子) - 尽量让它变得更好

$mFinalArray = fixMyArray($results);

print_r($mFinalArray);

function fixMyArray($results){

    // Create categories - parent_id == 0
    foreach($results as $index => $result)                           // $index = 0|1|2|3|4|5|6|7|8|9
        if($result['parent_id'] == 0)                                // $result['parent_id'] = current item parent_id
            $mCategories[$result['name']] = $result['id'];           // $mCategories['Human Resources'] = 1|2|3|4

    // Insert each data to the right parent
    foreach($results as $index => $result)                           // $index = 0|1|2|3|4|5|6|7|8
        if($result['parent_id'] != 0)
            foreach($mCategories as $subindex => $category)          // $subindex = Human Resources | Marketing | Operations | Design
                if($result['parent_id'] == $category)                // $category = 0|1|2|3|4
                        $mFinalArray[$subindex][] = $result['name']; // ex. $mFinalArray['Human Resources'][] = Human Personal

    return $mFinalArray;    

}

*最后一行有一个额外的 [] $mFinalArray[$subindex] [] = $result['name']。这意味着附加到数组。

输出:

Array
(
    [Design] => Array
        (
            [0] => Marketing Design
            [1] => Graphic Design
            [2] => Print Design
        )

    [Human Resources] => Array
        (
            [0] => Human Personal
        )

    [Operations] => Array
        (
            [0] => Food Ops
        )

)