Sarvar Nishonboyev
Sarvar Nishonboyev

Reputation: 13090

Comparing array values in nested foreach

I've two arrays:

$rooms = [1,2,3,4,5,6,7,8,9];
$reserved_rooms = [4, 7]; 

I would like to print this array like this:

1
2
3
Room 4 is reserved
5
6
Room 7 is reserved

Her is my code:

$rooms = [1,2,3,4,5,6,7,8,9];
$reserved_rooms = [4, 7]; 

foreach($rooms as $key=>$val){
    foreach($reserved_rooms as $val2){
        if($val == $val2){
            echo $val2." room is reserved";
        }   
        else
            echo $val."<br>";
    }
}

The result is:

1
1
2
2
3
3
4 room is reserved4
5
5
6
6
7
7 room is reserved8
8
9
9

Upvotes: 1

Views: 996

Answers (5)

Alexander
Alexander

Reputation: 12785

In case you do not want to use in_array() function :

$rooms = [1,2,3,4,5,6,7,8,9];
$reserved_rooms = [4, 7]; 

array_map(function ($room) use ($reserved_rooms) { 
    foreach($reserved_rooms as $reserved_room) {
       if ($reserved_room == $room) { 
           print "Room $room is reserved\n";
           return;
       }
    }
    print "$room\n"; 
}, $rooms);

https://eval.in/508743

Upvotes: 1

$rooms = [1,2,3,4,5,6,7,8,9];
$reserved_rooms = [4, 7]; 

foreach($rooms as $key=>$val){
    $flag = false;
    foreach($reserved_rooms as $val2){
        if($val == $val2){
            echo "Room ".$val2." is reserved<br />";
            $flag=true;
            break;
        }        
    }
    if($flag == false){
        echo $val."<br />";
    }
}

Upvotes: 0

Federkun
Federkun

Reputation: 36944

You need to move your echo outside the loop.

$rooms = [1,2,3,4,5,6,7,8,9];
$reserved_rooms = [4, 7]; 

foreach($rooms as $key=>$val){
    $isReserved = false; // add this

    foreach($reserved_rooms as $val2){
        if($val == $val2){
            $isReserved = true;
            break; // is reserved, no need to check the other values
        }
    }

    if ($isReserved) { // now decide whether it is reserved or not
        echo $val." room is reserved";
    } else {
        echo $val."<br>";
    }
}

Upvotes: 4

Florian Humblot
Florian Humblot

Reputation: 955

You should try this:

foreach($rooms as $key=>$val){
    if(in_array($val, $reserved_rooms){
        echo $val." room is reserved";
    }else{
        echo $val
    }
}

Upvotes: 0

ʰᵈˑ
ʰᵈˑ

Reputation: 11375

Use in_array() to check if a value exists in the array.

foreach($rooms as $room) {
   if( in_array($room, $reserved_rooms) ) {
      echo $room .' is reserved.' . PHP_EOL;
      continue;
   }
   echo $room . PHP_EOL;
}

https://eval.in/508706

Upvotes: 3

Related Questions