用php上的数据库填充菜单
因此,我正在为站点构建一个菜单,该菜单将由数据库填充,当我查询数据库时,我得到如下数组: 数组:用php上的数据库填充菜单,php,Php,因此,我正在为站点构建一个菜单,该菜单将由数据库填充,当我查询数据库时,我得到如下数组: 数组: Array ( [0] => Array ( [id] => 1 [nome] => Home [parent_id] => 0 ) [1] => Array ( [id] => 2
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 )
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
)
)
在本例中,它返回ID,但可以返回一个数组,其中包含每个项的完整信息
我可以再次查询数据库并获得相同的结果,但恐怕这不是一个好的做法。例如,如果我有一个巨大的菜单,脚本将查询太多的数据库,这将大大降低页面的呈现速度
我正在寻找这样做的方法,我已经感到头晕和疲惫
我意识到在这个例子中,我没有链接,但很容易在最后添加它们,这就是为什么我现在不使用它们:p它可能看起来像这样(假设我正确理解您的问题): 函数getChild($needle,$sourceArray) { $ret=array(); 对于($i=$needle;$i<$sourceArray.count();$i++) { array_push($ret,$sourceArray[$i]['id']); } 返回$ret; }
编辑:函数不是length()-它是count()您需要将数组传递到函数getChild(): 大概是这样的:
Array ( [0] => 3 [1] => 4 [2] => 5 )
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");
相反,您正在尝试访问带有数字索引的关联数组。我不想混淆任何东西,函数getChild实际上是我的问题,我不知道如何编写它,这就是我寻求帮助的原因……我的答案提供了您要找的解决方案吗?这两个问题都不是我需要的,但他们中的每一个人都以某种方式帮助我达到了我需要的结果。。。现在我不知道该怎么做了…我的解决方案怎么会失败呢?你问:“在这个例子中,它返回ID,但它可以返回一个数组,其中包含每个项的完整信息…”你问的是一个函数,它以不确定的整数数作为参数,并返回每个子数组中这些位置的值。你到底想要什么?我已经通过答案和其他网站的一条信息解决了这个问题,我想过滤初始数组(这是我用pdo查询数据库时得到的结果,这就是为什么我说:“我可以再次查询数据库并获得相同的结果,但我担心这不是一个好做法。”)休息了一段时间后,我再次搜索并找到了一种方法来完全实现我在其他网站上想要的功能,我对它进行了调整以适应我已有的功能…我尝试了你的建议,但它隐藏了一个致命错误**致命错误:在…**中调用未定义的函数length()**该解决方案非常荒谬,而且肯定不会满足你的要求。