Как вы можете сравнить данные из двух массивов, используя foreach? - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть эти два канала (feed1, feed2), они оба предоставляют некоторые идентификаторы, я пытаюсь выяснить, просматривая оба из них, могу ли я сопоставить идентификаторы, и если они совпадают, не отображают это ID.

foreach($feed->data as $item){
echo $item->id;
}

foreach($feed2->data as $item){
echo $item->id;
}

это мой код в PHP для отображения всех идентификаторов из двух циклов foreach, но я хотел, чтобы они были вложены друг в друга, поэтому, если идентификаторы в совпадениях feed1 и feed2 не отражаются. так что я предполагаю, что они могут быть утверждением if где-то. Спасибо

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012
$foundflag=false;
foreach($feed->data as $item){
     foreach($feed2->data as $item1){
        if($item->id == $item1->id){
           $foundflag = true;
           $array[]=$item1->id;
        }
    }
    if(!$foundflag){
        echo $item->id;
    }
}
foreach($feed2->data as $item1){
     if(!(in_array($item1->id,$array))){
        echo $item1->id;
     }
}

Первый вложенный цикл будет отображать идентификатор элемента из первого канала, которого нет во втором канале, а второй элемент foreach будет отображать идентификатор второго канала, которого нет в первом канале

0 голосов
/ 16 февраля 2012

Если я правильно понял вопрос, то что-то вроде этого должно работать. Возможно, вам лучше сделать это в массиве, как упоминалось в других вопросах, но это также должно работать.

$items;
foreach($feed->data as $item){
  echo $item->id;
  foreach($feed2->data as $item2){
    echo $item2->id;
    $pos = strrpos($items, $item2->id);
    if ($item2->id != $item->id) && ($pos == false)
      $items = $item2->id + ", ";
    }
}

echo $items;
0 голосов
/ 16 февраля 2012

Вы можете сохранить идентификаторы одного массива объектов в виде простого одномерного массива, а затем во время цикла по другому каналу просто проверить, существует ли идентификатор в другом.

# Create your variables to store the ID's of the two feeds
$ids_1 = array();
$ids_2 = array();

# Populate the arrays
foreach ($feed->data as $item1) {
    $ids_1[] = $item1->id;
}
foreach ($feed2->data as $item2) {
    $ids_2[] = $item2->id;
}

# Loop through the first feed, and exclude the items that are the same in the second
foreach($feed->data as $item){
    if (!in_array($item->id, $ids2)) {
        echo $item->id;
    }
}

# Loop through the second feed, and exclude the items that are the same in the first
foreach($feed2->data as $item){
    if (!in_array($item->id, $ids1)) {
        echo $item->id;
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...