проверьте, является ли значение из цикла foreach в массиве

Хорошо, я серьезно застрял, я работал над навигационным меню, которое я просто не могу получить, чтобы функционировать так, как я хочу, поэтому я изменил курс, но теперь я снова застрял, поэтому любая помощь будет очень оценена и отчаянно необходима!

У меня есть код ниже и я пытаюсь сделать следующее: у меня есть массив, содержащий информацию для всех страниц сайта, а затем еще один массив, содержащий иды страниц, которые являются дочерними страницами. То, что я хочу сделать, это использовать цикл foreach для циклического перехода по всем страницам первого массива и проверить, находятся ли их идентификаторы в массиве дочерних идентификаторов или нет. Если это не так, они являются верхними навигационными страницами, и я хочу вывести некоторый код, а затем настроить другой цикл foreach, который будет проверять, имеют ли подстраницы родительский идентификатор текущей страницы и т. Д.

Я не могу понять, как сравнить $ b с идентификаторами в массиве $ childpages, независимо от того, что я пытаюсь! Возможно ли это, и если да, то как это сделать?

Это первый раздел того, что я пытаюсь в настоящее время

<?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 как $ 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 EG 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 EG }; echo "</li>"; }; }; echo "</ul>\n"; }; ?> 

Затем я вызываю главную функцию buildMenu6 следующим образом:

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

Вам нужен вложенный foreach (я изменил ваши имена var или использовал оригинальные для удобочитаемости):

 foreach($allpages as $page) { foreach($childpages as $child) { if($page['id'] == $child['id']) { //do something break; } } } 

Или PHP> = 5.5.0 use 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 } } 

 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 } 

согласно 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 (он вернет FALSE, если значение массива NULL для указанного ключа).