in_array显示数组循环中的所有值

时间:2014-08-29 20:56:58

标签: php arrays if-statement foreach

我正在尝试检查foreach循环中的值是否在查询中的数组中。如果每个值都不在查询中,那么它应该放入no_email_entered数组中,但是当我打印出数组时,它会打印出$ user-> user_email中包含的所有值打印出$ my_user_mails数组中未包含的那些。我也尝试了嵌套的foreach,但似乎也没有用。我很欣赏第二眼。

<?php
    //Creates empty array for inserts
    $no_email_entered = array();
    //Make a loop for the emails
    foreach( $users_for_site as $user ) {
    //Check if each email is in $my_user_emails array, if not add it to the $no_email_entered array 
        if( ! in_array( $user->user_email, $my_user_emails ) ) {
            $no_email_entered[] = $user->user_email;
        }
    }
    ?>

$ no_email_entered数组的打印结果为我提供了来自$ users_for_site的所有电子邮件,这是不正确的。

1 个答案:

答案 0 :(得分:0)

in_array()needle中的每个元素进行比较,因此您将在内部进行比较$object1 == $object2。仅当两个对象具有相同属性且具有相同值并且将是同一个类的实例时才会出现这种情况。

class Car{}
class CarRed extends Car{}

$obj_car1 = new Car();
$obj_car1->wheels = 4;
$obj_car1->doors = 5;

$obj_car2 = new Car();
$obj_car2->wheels = 4;
$obj_car2->doors = 5;

$obj_car3 = new Car();
$obj_car3->wheels = 4;
$obj_car3->doors = 5;
$obj_car3->id = 1234;

$obj_redcar = new CarRed();
$obj_redcar->wheels = 4;
$obj_redcar->doors = 5; 

var_dump($obj_car1 == $obj_car2); // true

var_dump($obj_car1 == $obj_car3); // false

var_dump($obj_car1 == $obj_redcar); // false

因此,检查两个数组中的对象是否是同一个类的实例。如果是,问题仍然存在,请提供该阵列的样本。