2014-08-29 35 views
-2

我試圖檢查foreach循環中的值是否在查詢中的數組中。如果每個值都不在查詢中,它應該被放入no_email_entered數組中,但是當我打印出數組時,它會打印出$ user-> user_email中只包含打印的所有值取出未包含在$ my_user_mails數組中的那些。我也嘗試了一個嵌套的foreach,而且似乎也沒有工作。我會很欣賞這一點。in_array顯示數組循環中的所有值

<?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 $,這是不正確的電子郵件。

+0

看起來一目瞭然。沒有看到'$ my_user_emails'和'$ users_for_site'的內容很難說。只需在代碼中添加幾條打印語句就可以很容易地看到發生了什麼。 – Dan 2014-08-29 21:04:05

+0

你知道你可以使用array_diff()嗎? http://ch2.php.net/manual/en/function.array-diff.php – 2014-08-29 21:05:32

+1

請仔細檢查你的'$ my_user_emails'數組,它只需要一維數組,例如只需'array('[email protected]','[email protected]','[email protected]')'還要注意,對於巨大的數組,in_array()可能需要很長時間。最好是執行'$ my_user_emails = array_flip($ my_user_emails)'而不是檢查'if(isset($ my_user_emails [$ user-> user_email]))' – Yaroslav 2014-08-29 21:07:40

回答

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 

因此,檢查兩個數組內的對象是否是同一類的實例。如果問題仍然存在,請提供該陣列的示例。