簡體   English   中英

在函數php中運行函數

[英]Run function inside function php

新年快樂!:)

我對PHP相當陌生,我正在嘗試編寫一個函數來獲取父類別的子項,然后再次使用該函數來獲取子類別的子項。

但是,它沒有按我希望的那樣工作,我無法弄清楚為什么。 希望您有時間在這里幫助我。

謝謝! 羅伊

$Parents =

Array
(
[0] => Array
    (
        [category_id] => 3
        [parent_id] => 1
        [name] => PC Onderdelen
        [is_active] => 1
        [position] => 2
        [level] => 1
    )

[1] => Array
    (
        [category_id] => 11
        [parent_id] => 1
        [name] => test
        [is_active] => 1
        [position] => 3
        [level] => 1
    )

[2] => Array
    (
        [category_id] => 14
        [parent_id] => 1
        [name] => Rootcat3
        [is_active] => 1
        [position] => 4
        [level] => 1
    )
)

功能

public function getchilds($parents)
{
    $subcategories = array();

    foreach ($parents as $parent)
        {
            $parentid = $parent['category_id'];

            $sql = "SELECT * FROM categories WHERE parent_id = $parentid";

            $db = new DB ('novacpos');
            $result = $db->query($sql);

            while ($rows = mysqli_fetch_assoc($result))
                {
                    $subcategories[] = $rows;
                }
            $parent["children"] = $subcategories;
            unset ($subcategories);
            $parents1[] = $parent;
        }
    return $parents1;
}

結果

Array
(
[0] => Array
    (
        [category_id] => 3
        [parent_id] => 1
        [name] => PC Onderdelen
        [is_active] => 1
        [position] => 2
        [level] => 1
        [children] => Array
            (
                [0] => Array
                    (
                        [category_id] => 4
                        [parent_id] => 3
                        [name] => Moederborden
                        [is_active] => 1
                        [position] => 2
                        [level] => 2
                    )

                [1] => Array
                    (
                        [category_id] => 6
                        [parent_id] => 3
                        [name] => Behuizingen
                        [is_active] => 1
                        [position] => 1
                        [level] => 2
                    )

                [2] => Array
                    (
                        [category_id] => 8
                        [parent_id] => 3
                        [name] => Laptops
                        [is_active] => 1
                        [position] => 3
                        [level] => 2
                    )

                [3] => Array
                    (
                        [category_id] => 9
                        [parent_id] => 3
                        [name] => Muizen
                        [is_active] => 1
                        [position] => 4
                        [level] => 2
                    )

            )

    )

[1] => Array
    (
        [category_id] => 11
        [parent_id] => 1
        [name] => test
        [is_active] => 1
        [position] => 3
        [level] => 1
        [children] => Array
            (
                [0] => Array
                    (
                        [category_id] => 13
                        [parent_id] => 11
                        [name] => Test2
                        [is_active] => 1
                        [position] => 1
                        [level] => 2
                    )

            )

    )

[2] => Array
    (
        [category_id] => 14
        [parent_id] => 1
        [name] => Rootcat3
        [is_active] => 1
        [position] => 4
        [level] => 1
        [children] => Array
            (
                [0] => Array
                    (
                        [category_id] => 15
                        [parent_id] => 14
                        [name] => Extracat1
                        [is_active] => 1
                        [position] => 1
                        [level] => 2
                    )

            )

    )

)   

print_r ($parent["children"]);

Array
(
[0] => Array
    (
        [category_id] => 4
        [parent_id] => 3
        [name] => Moederborden
        [is_active] => 1
        [position] => 2
        [level] => 2
    )
[1] => Array
    (
        [category_id] => 6
        [parent_id] => 3
        [name] => Behuizingen
        [is_active] => 1
        [position] => 1
        [level] => 2
    )

[2] => Array
    (
        [category_id] => 8
        [parent_id] => 3
        [name] => Laptops
        [is_active] => 1
        [position] => 3
        [level] => 2
    )

[3] => Array
    (
        [category_id] => 9
        [parent_id] => 3
        [name] => Muizen
        [is_active] => 1
        [position] => 4
        [level] => 2
    )

)
Array
(
[0] => Array
    (
        [category_id] => 13
        [parent_id] => 11
        [name] => Test2
        [is_active] => 1
        [position] => 1
        [level] => 2
    )

)
Array
(
[0] => Array
    (
        [category_id] => 15
        [parent_id] => 14
        [name] => Extracat1
        [is_active] => 1
        [position] => 1
        [level] => 2
    )

)

所以我想:(但不起作用)

public function getchilds($parents)
{
    $subcategories = array();

    foreach ($parents as $parent)
        {
            $parentid = $parent['category_id'];

            $sql = "SELECT * FROM categories WHERE parent_id = $parentid";

            $db = new DB ('novacpos');
            $result = $db->query($sql);

            while ($rows = mysqli_fetch_assoc($result))
                {
                    $subcategories[] = $rows;
                }
            $parent["children"] = $subcategories;
            unset ($subcategories);

            getchilds($parent["children"]); <-----------

            $parents1[] = $parent;
        }

    return $parents1;
}
class myModel{
public function get_categories(){

    $sql = "SELECT * FROM categories";

            $db = new DB ('novacpos'); // You should use a singleton pattern for this
            $result = $db->query($sql);
            $categories = array();

            while ($rows = mysqli_fetch_assoc($result))
                {
                    $categories[] = $rows;
                }

     return $categories;
}

public function organize_categories($categories) {
        $resultParents = array();
        $resultChildren = array();

        foreach ($categories as $row) {
            if(empty($row['parent']))
                $resultParents[] = $row;
            else
                $resultChildren[] = $row;
        }

        foreach ($resultParents as &$parent){
            $parent['children'] = $this->_organize_category($resultChildren, $parent['category_id']);
        }
        unset($parent);
        return $resultParents;
    }

    private function _organize_category($resultChildren, $parent) {
        $children = array();
        foreach ($resultChildren as $child) {
            if ($child['parent_id'] == $parent){
                $child['children'] = $this->_organize_category($resultChildren, $child['category_id']);
                $children[] = $child;
            }
        }

        return $children;
    }
}

最后:

$categories = $myModel->get_categories();
$organized_categories = $myModel->organize_categories($categories);
var_dump($organized_categories);

它以程序樣式實現,但可以正常工作,只需根據需要重寫即可

$db = new mysqli('localhost', 'root', 'mysql', 'test');

$parents = [];
$result = $db->query('SELECT * FROM categories WHERE category_id IN (0,1)');

while ($row = $result->fetch_assoc())
{
    $parents[] = $row;
}


function getchilds($parents, $db)
{
    foreach ($parents as &$parent)
    {
        $result = $db->query("SELECT * FROM categories WHERE parent_id = {$parent['category_id']}");

        if ($result && $result->num_rows > 0)
        {
            while ($row = $result->fetch_assoc())
            {
                $parent['children'][] = $row;
            }

            $parent['children'] = getchilds($parent['children'], $db);
        }
    }

    return $parents;
}

echo '<pre>';
print_r(getchilds($parents, $db));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM