2014-10-17 66 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

相关问题