2013-04-23 71 views
1

所以我建立一个菜单到一个站点,蚂蚁菜单将通过数据库来填充,当我查询数据库,我得到这样的数组:菜单与数据库上的PHP填充

阵:

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 
} 

其中$阵列,是孩子们的信息:

print_r(getChild(2)); 

将输出是这样的:

Array ([0] => 3 [1] => 4 [2] => 5) 
在这个例子中

它返回的ID,但它可能与项目的每一个完整的信息返回数组...

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

我分层搜索这样的方式我已经头晕,疲惫的...

我意识到,在这个例子中,我没有任何的联系,但它很容易添加它们到底,这是我为什么不跟他们合作现在:P

回答

1

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

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

    return $ret; 
} 

编辑:功能不长度( ) - 这是计数()

+0

我尝试了你的消化,但它引发了一个致命的错误** 致命错误:调用未定义的函数长度()在...... ** – 2013-04-23 14:25:44

+0

该解决方案很荒谬,当然不会做你所问。 – 7stud 2013-04-24 00:31:59

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"); 

而是,您正在尝试访问带有数字索引的关联数组。

+0

看到我不想混淆任何东西,函数getChild实际上是我的问题,我不完全知道如何写它,这就是为什么我要求帮助... – 2013-04-23 14:22:09

+0

我的答案是否提供了您正在寻找的解决方案对于? – 7stud 2013-04-24 00:28:24

+0

这两个问题都不是我所需要的,但是他们每个人都以某种方式帮助达到我需要的结果......现在我不知道该怎么做...... – 2013-04-24 08:50:48