好的,我严重陷入困境,我一直在制作一个导航菜单,我无法按照我想要的方式运行,所以我已经改变了方向,但现在再次陷入困境帮助将非常感激和迫切需要!
我有下面的代码并尝试执行以下操作 - 我有一个数组,其中包含网站所有页面的信息,然后是另一个包含子页面的ID的数组。我想要做的是使用foreach循环遍历第一个数组的所有页面,并检查它们的id是否在子ID的数组中。如果它们不是那么它们是顶级导航页面,我想输出一些代码,然后设置另一个foreach循环,它将检查是否有任何子页面具有当前页面的父ID,依此类推。
无论我尝试什么,我似乎无法弄清楚如何将$ b与$ childpages数组中的id进行比较!这有可能吗?如果是这样,请问怎么样?
这是我目前正在尝试的第一部分
<?php function buildMenu4 ($allpages, $childpages) {
foreach ($allpages as $pages){
$a = $pages['parentid'];
$b = $pages['id'];
$c = $childpages;
echo "<ul>\n";
if (!in_array($b, $c)) {
DO SOMETHING..........
$ c的数组内容:
Array
(
[0] => Array ( [id] => 6 )
[1] => Array ( [id] => 15 )
[2] => Array ( [id] => 100 )
[3] => Array ( [id] => 101 )
[4] => Array ( [id] => 103 )
[5] => Array ( [id] => 104 )
[6] => Array ( [id] => 105 )
)
编辑---------------------------------
我已经重新编写了代码,并且回到了几天前我所处的变化!无论如何,下面的代码按预期工作,直到我尝试循环它然后它只是回应第一个foreach循环的结果,例如foreach($ allpages as $ pages){.....但没有做任何其他事情。
我正在尝试创建一个名为loopMenu的函数,然后以递归方式运行此函数,直到不再显示任何页面为止。我试着在下面的代码块中用pusedo代码编写函数,但是我无法让它工作。我可能搞砸了一些论点或参数,或者我在某个地方犯了一个大错,但我无法看到它 - 任何帮助都会得到极大的赞赏和迫切的需要!
<?php function buildMenu6 ($allpages, $childpageids, $childpages, $subchildpages) {
foreach ($childpageids as $childid){
$c[] = $childid['id'];
};
echo "<ul>\n";
foreach ($allpages as $pages){
$a = $pages['parentid'];
$b = $pages['id'];
if (!in_array($b, $c)){
echo "<li><a href=" . $pages['url'] . ">" . $pages['linklabel'] . "</a>";
WHERE I WANT THE FUNCTION TO START E.G. function loopMenu($childpages, $subchildpages){...the code that follows....
echo"<ul>\n";
foreach ($childpages as $childparent) {
$d = $childparent['parentid'];
$e = $childparent['id'];
if (($d == $b) or ($d == $g)) {
echo "<li><a href=" . $childparent['url'] . ">" . $childparent['linklabel'] . "</a>";
echo "<ul>\n";
foreach ($subchildpages as $subchild){
$g = $subchild['id'];
$f = $subchild['parentid'];
if ($f == $e){
echo "<li><a href=" . $subchild['url'] . ">" . $subchild['linklabel'] . "</a>";
WHERE I TRY TO RERUN THE FUNCTION USING loopMenu($childparent, $subchild);
echo "<li/>";
};
};
echo"</ul>\n";
echo "</li>";
};
};
echo "</ul>\n";
WHERE I WANT MY FUNCTION TO END E.G. };
echo "</li>";
};
};
echo "</ul>\n";
}; ?>
然后我像这样调用main buildMenu6函数:
<?php buildMenu6($pageids, $childPageIds, $childPageArray, $childPageArray); ?>
答案 0 :(得分:1)
您需要一个嵌套的foreach
(我已更改您的var名称或使用原始名称以提高可读性):
foreach($allpages as $page) {
foreach($childpages as $child) {
if($page['id'] == $child['id']) {
//do something
break;
}
}
}
或PHP&gt; = 5.5.0使用array_column
:
$childids = array_column($childpages, 'id');
foreach($allpages as $page) {
if(in_array($page['id'], $childids)) {
//do something
}
}
作为一种混合体:
foreach($childpages as $child) {
$childids[] = $child['id'];
}
foreach($allpages as $page) {
if(in_array($page['id'], $childids)) {
//do something
}
}
答案 1 :(得分:0)
foreach ($allpages as $pages){
$a = $pages['parentid'];
$b = $pages['id'];
$c = $childpages;
echo "<ul>\n";
// In array isn't aware of the 'id' keys
$found = false;
foreach ($c as $id => $value) {
if ($value == $b) {
$found = true;
}
}
if ($found) {
// DO SOMETHING
}
答案 2 :(得分:0)
根据THIS SO ANSWER,array_key_exists
是(边缘)最快的PHP数组查找。
因为,根据您的描述,假设[id]
是一个PRIMARY键并因此是唯一的,我会改变[id]
维度并将值直接放在其代替中似乎是合理的:
$c[105] = NULL; // or include some value, link page URL
... // some code
$needle = 105;
... // some more code
if (array_key_exists($needle,$c)) {
而不是
$c[5] = 105; // $c is the haystack
... // some code
$needle = 105;
... // some more code
foreach ($c as $tempValue) {
if ($tempValue == $needle) {
如果你想在$c
中放置值,那么你也可以使用isset
(如果所述键的数组值为NULL,它将返回FALSE)。