所以我正在建立一个网站的菜单,蚂蚁菜单将由数据库填充,当我查询数据库时,我得到类似这样的数组:
阵列:
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
答案 0 :(得分:1)
它可能看起来像这样(假设我理解你的问题):
function getChild( $needle, $sourceArray )
{
$ret = array();
for( $i = $needle; $i < $sourceArray.count(); $i++ )
{
array_push( $ret, $sourceArray[ $i ][ 'id ' ]) ;
}
return $ret;
}
已编辑:该功能不是长度() - 它是 count()
答案 1 :(得分: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");
相反,您正尝试使用数字索引访问关联数组。