2014-10-17 59 views
1

我想檢查一個數組中的元素是否已經存在於另一個數組中。如果它存在,那麼我想將第一個數組中的所有元素添加到一個新的關聯數組中,並添加一個額外的鍵值([check] => 0/1)以指示該元素是否存在於另一個數組中。檢查數組中的元素是否存在於另一個數組中的PHP

這是我嘗試過的示例代碼。

$first = array("0"=> 111, "1"=>222, "2"=>333, "3"=> 444); 
$second = array("0"=> 22, "1"=>234, "2"=> 456); 

$final_array = array(); 

foreach($first as $f) 
{ 
    if(in_array($f, $second)) 
    { 
     $final_array['id'] = $f; 
     $final_array['check'] = 1; 
    } 

    else 
    { 
     $final_array['id'] = $f; 
     $final_array['check'] = 0; 
    } 
} 

由於某些原因,我只能將最後一個元素添加到$ final_array。有人能告訴我我做錯了什麼嗎?

//Output for $final_array 
Array ([id] => 444 [check] => 0) 

//final output should look like this 
$final_array = array("0"=> array("id" => 111, "check" => 0), 
        "1" => array("id" => 222, "check" => 1), 
        "2" => array("id" => 333, "check" => 0), 
        "3" => array("id" => 444, "check" => 0)); 
+0

http://php.net/manual/en/function.array-intersect.php – GordonM 2014-10-17 07:58:39

回答

1

由於您的期待推多個項目,你需要添加另一個維度內:使用三元

$first = array("0"=> 111, "1"=>222, "2"=>333, "3"=> 444); 
$second = array("0"=> 222, "1"=>234, "2"=> 456); 

$final_array = array(); 
foreach($first as $f) { 
    $temp = array('id' => $f); 
    if(in_array($f, $second)){ 
     $temp['check'] = 1; 
    } else { 
     $temp['check'] = 0; 
    } 
    $final_array[] = $temp; 
} 

或者只是這樣的:

$final_array = array(); 
foreach($first as $f) { 
    $final_array[] = array('id' => $f, 'check' => in_array($f, $second) ? 1 : 0); 
} 

什麼情況是,你的數值每次迭代都會被過度寫入:

$final_array['id'] = $f; // overwritten 
$final_array['check'] = 1; // overwrriten 

您需要用另一個尺寸推它:$final_array[] = the array

+0

謝謝!這正是我正在尋找的。 – Cryssie 2014-10-17 08:21:37

+0

@Cryssie im很高興這有幫助 – Ghost 2014-10-17 08:21:50

+1

說實話,我從頭開始自學PHP,似乎還有很長的路要走。直到今天我從未聽說過三元。非常感謝。 – Cryssie 2014-10-17 08:29:07

相關問題