Перебор и сравнение 2-х массивов

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Не получается реализовать сравнение и перебор 2-х многомерных массивов

#1 20 марта 2016 в 13:38
Здравствуйте!

Возникла сложность в реализации логики написания кода, прошу помочь!

Есть два многомерных массива $array1

  1.  
  2. (
  3. [1] => Array
  4. (
  5. [id] => 1
  6. [title] => title1
  7. )
  8. [2] => Array
  9. (
  10. [id] => 2
  11. [title] => title2
  12. )
  13. [3] => Array
  14. (
  15. [id] => 3
  16. [title] => title3
  17. )
  18. )
  19.  
и $array2

  1.  
  2. (
  3. [1] => Array
  4. (
  5. [id] => 1
  6. [array1_id] =>1
  7. )
  8. [2] => Array
  9. (
  10. [id] => 2
  11. [array1_id] =>2
  12. )
  13. [3] => Array
  14. (
  15. [id] => 3
  16. [array1_id] =>2
  17. )
  18. )
  19.  

Через foreach делаю перебор:

  1.  
  2. <?php foreach($array1 as $arr1){ ?>
  3.  
  4. <div><?php echo $arr1['title']?></div> //Заголовки первого массива
  5.  
  6. <?php foreach($array2 as $arr2){ ?>
  7.  
  8. <?php if($arr1['id'] == $arr2['array1_id']) { ?>
  9.  
  10.  
  11. //Тут данные из второго массива
  12.  
  13.  
  14. <?php } ?>
  15.  
  16. <?php } ?>
  17.  
  18. <?php } ?>
  19.  
  20.  
Проблема в том, что если у элемента первого массива нет соответствующих элементов из второго массива, то заголовок этого элемента все равно отображается.

Как сделать чтобы он не отображался?

p.s. массив примерный, будет намного больше!
#2 20 марта 2016 в 19:16
Что то у вас не так с циклом. Нет связи массивов. Возможно второй цикл должен быть как то так
  1. foreach($array2 as $arr1 = $value){
  2. echo $key => $value;
  3. }
#3 20 марта 2016 в 19:51


Что то у вас не так с циклом. Нет связи массивов. Возможно второй цикл должен быть как то так

  1. foreach($array2 as $arr1 = $value){
  2. echo $key => $value;
  3. }

Lora

Спасибо что ответили, но ерунду сударь написали!
#4 20 марта 2016 в 20:05
а где у вас условие не ровно? если 1<>2 то ...?
#5 20 марта 2016 в 20:06


а где у вас условие не ровно? если 12 то ...?

Вячеслав

Если не равно, то ничего выводить не нужно!
#6 20 марта 2016 в 20:10
вот в том то и дело напишите это условие! и поставьте к примеру display: none
<?php if($arr1['id'] <> $arr2['array1_id']) { ?>
#7 20 марта 2016 в 20:30


вот в том то и дело напишите это условие! и поставьте к примеру display: none

Вячеслав

Вы не поняли, мне нужно скрыть код
  1.  
  2. <div><?php echo $arr1['title']?></div> //Заголовки первого массива
  3.  
А он в первом массиве.

Я понимаю что возможно трудно понять чего я хочу, но я максимально попытался объяснить…
#8 20 марта 2016 в 20:38
Да я примерно понимаю, я делал это на примере… перейдите на saratovplus.ru (сайт только делается).Перейдите в раздел люди, там увидите кнопку посмотреть, так вот там несколько условий, пройдитесь по пользователям, и по открывайте это подробнее, найдете, вариант где пользователь не оставил информации, а если это твоя страница будет вывод: отредактируйте свой профиль… это примерно одно и тоже, или же нет?
#9 20 марта 2016 в 20:42


Да я примерно понимаю, я делал это на примере… перейдите на saratovplus.ru (сайт только делается).Перейдите в раздел люди, там увидите кнопку посмотреть, так вот там несколько условий, пройдитесь по пользователям, и по открывайте это подробнее, найдете, вариант где пользователь не оставил информации, а если это твоя страница будет вывод: отредактируйте свой профиль… это примерно одно и тоже, или же нет?

Вячеслав

К сожалению я не смогу ответить на ваш вопрос, так как не совсем понял что Вы имели в виду, да и код формирования я не видел. Думаю если хотите помочь, то стоит ещё несколько раз внимательно прочитать мой пост, может поймете!
Спасибо за помощь!
#10 20 марта 2016 в 20:50
То что у вас написано, так это написано в идеале, у вас нет условий если данные не соответствуют желаемого, то есть как понимаю я вам надо при не равенстве, большинстве, меньшинстве, прописать условия внутри которых будет инструкция к выполнению… так ли я вас понимаю?
#11 20 марта 2016 в 21:13
В общем просто прочтите это и ваш вопрос можно будет наверное закрыть
<?php if (count($arr1)==1){ ?>-это если равно единице
#12 20 марта 2016 в 21:18


В общем просто прочтите это и ваш вопрос можно будет наверное закрыть
-это если равно единице

Вячеслав

К сожалению я вас опять не понимаю, попробуйте написать то что вы имеете в виду, кодом!
#13 20 марта 2016 в 21:35
Итак у вас есть определенное правило если
<?php if($arr1['id'] == $arr2['array1_id']) { ?>, но если случается такой вариант как <?php if($arr1['id'] <> $arr2['array1_id']) { ?>? то у вас выводиться массив первый то есть <div><?php echo $arr1['title']?>, а в идеале вам нужно выводить если у первого массива есть данные и у второго(например вопрос -ответ) то пишите

<?php if (count($arr1)<=1){ ?>
<?php if (count($arr2)>=1){ ?>
//то есть если $arr1<= 1, то содержимое не показывать
<?php } ?>
<?php } ?>
сразу скажу что такой код будет работать но написан не грамотно, я так пишу к примеру
так более понятно? Ставьте это после сравнения $ar1 и $ar2
вот ссылка на ьануал по php по сравнению массивиов
php.net/manual/ru/language.operators.comparison.php
#14 20 марта 2016 в 22:33
Вы сильно все усложняете когда два исходных массива формируете, зачем их два, делайте один и не мучайтесь. Пример необходимой структуры можно подсмотреть пропустив то что есть сейчас через это
  1. foreach($array1 as &$arr1){
  2. foreach($array2 as $arr2){
  3. if($arr1['id'] == $arr2['array1_id']){
  4. $arr1['data'] = array('id' => $arr2['id'], 'array1_id' => $arr2['array1_id']);
  5. }
  6. }
  7. }
#15 20 марта 2016 в 23:49
В текущем варианте надо просто переставить строку 4 после 8 facepalm
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.