Php 检查foreach循环中的值是否在数组中

Php 检查foreach循环中的值是否在数组中,php,arrays,function,foreach,Php,Arrays,Function,Foreach,好吧,我真的被卡住了,我一直在做导航菜单,我就是不能按照我想要的方式工作,所以我改变了策略,但现在又被卡住了,所以任何帮助都将是非常感激和迫切需要的 <?php function buildMenu6 ($allpages, $childpageids, $childpages, $subchildpages) { foreach ($childpageids as $childid){ $c[] = $childid['id'];

好吧,我真的被卡住了,我一直在做导航菜单,我就是不能按照我想要的方式工作,所以我改变了策略,但现在又被卡住了,所以任何帮助都将是非常感激和迫切需要的

 <?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";
        }; ?>
我有下面的代码,正在尝试做以下工作-我有一个数组,保存站点所有页面的信息,然后是另一个数组,保存作为子页面的页面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..........
编辑---------------------------------

我已经修改了代码,现在又回到了前几天的状态!!无论如何,下面的代码按预期工作,直到我尝试循环它,然后它只是回显第一个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";
        }; ?>

然后我调用主buildMenu6函数,如下所示:

<?php buildMenu6($pageids, $childPageIds, $childPageArray, $childPageArray); ?>

foreach($allpages作为$pages){
$a=$pages['parentid'];
$b=$pages['id'];
$c=$childpages;
回声“
    \n”; //在数组中不知道“id”键 $found=false; foreach($c作为$id=>$value){ 如果($value=$b){ $found=true; } } 如有($已找到){ //做点什么 }
您需要一个嵌套的
foreach
(为了可读性,我已经更改了您的var名称或使用了原始名称):

或PHP>=5.5.0使用
array\u 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
    }
}
据介绍,
array\u key\u exists
是php最快的数组查找

根据您的描述,似乎可以合理地假设
[id]
是主键,因此是唯一的,因此我将更改
[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)。

您可能还需要循环$c的内容,但因为我看不到$c(childpages)中的数据是如何显示的是结构化的,我不能写一个例子。childpages数组是什么样子的?我编辑了上面的文章,并添加了数组的结构和内容$childpages是一个数组?你能不能把一个例子放在一起运行,并说明什么东西不能像你期望的那样工作?技术上,$childPageArray是数组,我正在将它传递到f函数使用$childpages调用函数如下-很可能我在这一过程中犯了一些愚蠢的错误,因为我已经做了这么长时间了,现在我有点糊涂了!哈哈,我想我在大约6个小时前就有了这个,只是我有一个=介于$id和$child['id')之间因此,我将试一试,看看它是否能满足需要。第二个看起来非常吸引人,因为我认为我在代码后面需要一个递归循环,我一直在努力解决这个问题。当我有多个foreach循环时,我只是无法使它正常工作。我仍在尝试访问$childpages数组,但似乎不行o让它工作起来。出于某种原因,似乎没有任何结果,比如foreach($childpages as$child){$d=$child['id'];print_r($d)};child['id'的值]只是看起来是空的,我想知道这是否是因为id键在数组中是第二级的,例如array=>key=>array=>id=>value。这会有什么区别吗?真正让人困惑的是,相同的结构对于$a=$pages['parentid']来说似乎工作得很好这个数组与子数组的结构相同,您认为如何?给定您发布的数组,
foreach($childpages as$child){echo$child['id'];}
按预期工作。我已经更新了我的代码,以显示我当前正在使用的代码。在我尝试循环之前,它正在按预期工作。我需要循环函数递归检查子级别并显示任何子页面,但我似乎无法将其破解-你有什么建议吗?非常感谢-我正在尝试s out,我想我可能需要重新调整一下,所以最后一点是if(!$found){做点什么,但无论哪种方式,这都可能是我需要的。我会尝试一下!我仍在尝试访问$childpages数组的内容,但它不起作用。我已按照您的建议尝试使用$c作为$id=>$value,但这似乎不会返回任何结果-如果我打印\r($value)例如,它没有显示任何内容。同样,将$c作为$value,然后将$d=$value['id']作为示例也不起作用。有什么建议吗?var_dump($c)在设置它并确保它确实包含您认为应该包含的内容之后,谢谢我使用了var_dump来帮助显示正在发生的事情,现在我已经得到了代码来完成我想要的事情,除了我现在需要在它上面运行递归循环,所以它会返回并检查更多子页面,并在相关的地方显示它们,但我无法让循环工作。我已经更新了上面的代码,不知道你是否能帮上忙?这已经让我发疯一个多星期了!
$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) {