1

所以我正在为一个站点构建一个菜单,该菜单将由数据库填充,当我查询数据库时,我得到类似这个数组的东西:

大批:

Array
(
    [0] => Array
        (
            [id] => 1
            [nome] => Home
            [parent_id] => 0
        )

    [1] => Array
        (
            [id] => 2
            [nome] => Tutorials
            [parent_id] => 0
        )

    [2] => Array
        (
            [id] => 3
            [nome] => Photoshop
            [parent_id] => 2
        )

    [3] => Array
        (
            [id] => 4
            [nome] => Illustrato
            [parent_id] => 2
        )

    [4] => Array
        (
            [id] => 5
            [nome] => Web Design
            [parent_id] => 2
        )

    [5] => Array
        (
            [id] => 6
            [nome] => HTML
            [parent_id] => 5
        )

    [6] => Array
        (
            [id] => 7
            [nome] => CSS
            [parent_id] => 5
        )

)

我想搜索它并只获取子项,例如:

function getChild($needle){
    ...
    return $array
}

其中 $array, 是孩子的信息:

print_r(getChild(2));

会输出如下内容:

Array ( [0] => 3 [1] => 4 [2] => 5 ) 

在此示例中,它返回 id,但它可以返回一个数组,其中包含每个项目的完整信息...

我可以再次查询数据库并获得相同的结果,但恐怕这不是一个好习惯。例如,如果我有一个巨大的菜单,脚本会查询太多的数据库,这会大大减慢页面的渲染速度。

我正在寻找一种方法来做到这一点,我已经头晕目眩,筋疲力尽......

我意识到在这个例子中我没有链接,但最后添加它们很容易,这就是我现在不使用它们的原因:P

4

2 回答 2

1

您需要将数组传递给函数 getChild():

getChild($data, 1, 2)

像这样的东西:

function getChild(){
    $results = [];
    $args = func_get_args();
    $arrays = array_shift($args);

    foreach ($arrays as $subarr) {
        $curr_results = [];
        $keys = array_keys($subarr);

        foreach ($args as $index) {
            $curr_results[] = $subarr[$keys[$index]];
        }
        $results[] = $curr_results;
    }

    return $results;
}




$data = [

["id" => 1, "nome" => "Home", "parent id" => 0],
["id" => 2, "nome" => "Tutorials", "parent id" => 0],
["id" => 3, "nome" => "Photoshop", "parent id" => 0],
["id" => 4, "nome" => "Illustrato", "parent id" => 2],

];

print_r(getChild($data, 1, 2));

--output:--

Array
(
    [0] => Array
        (
            [0] => Home
            [1] => 0
        )

    [1] => Array
        (
            [0] => Tutorials
            [1] => 0
        )

    [2] => Array
        (
            [0] => Photoshop
            [1] => 0
        )

    [3] => Array
        (
            [0] => Illustrato
            [1] => 2
        )

)

我不得不说,这似乎是一种混淆代码的愚蠢方式。写起来会更清楚:

getChildData($data, "nome", "parent_id"); 

相反,您正在尝试访问具有数字索引的关联数组。

于 2013-04-23T12:11:06.210 回答
1

它可能看起来像这样(假设我正确理解了您的问题):

function getChild( $needle, $sourceArray )
{ 
    $ret = array();
    for( $i = $needle; $i < $sourceArray.count(); $i++ )
    { 
         array_push( $ret, $sourceArray[ $i ][ 'id ' ]) ;
    }

    return $ret;
}

已编辑:函数不是length() - 它是count()

于 2013-04-23T11:38:57.457 回答