2013-02-19 22 views
1

我怎樣才能得到所需的輸出?我想檢查array1「entry_id」是否與array2「entry_id」不一樣我想從我的陣列中的值,如果它不出現在另一個陣列

我該怎麼做?我試着用array_diff_key ..但它沒有工作

數組1

Array ([0] => Array ([entry_id] => 53242 [site_id] => 2 [channel_id] => 2 [author_id] => 5 [1] => Array ([entry_id] => 76435 [site_id] => 8 [channel_id] => 8 [author_id] => 9 

數組2

Array ([0] => Array ([entry_id] => 89764 [site_id] => 1 [channel_id] => 1 [author_id] => 5 [1] => Array ([entry_id] => 53242[site_id] => 7 [channel_id] => 9 [author_id] => 1 

我想比較陣列1,相互ARRAY2並獲得所需的輸出:

所需的輸出:

Array ([0] => Array ([entry_id] => 76434 [site_id] => 8 [channel_id] => 8 [author_id] => 9 [1] => Array ([entry_id] => 76435 [site_id] => 8 [channel_id] => 8 [author_id] => 9 

回答

0

對於較小尺寸的輸入數組,基本上可以使用兩個for循環來完成。

示例代碼(未測試!):

// $array1 and $array2 are the inputs 
// $array3 is output 
$array3=array(); 
// Keep track of what we have already found 
$buff=array(); 
foreach($array1 as $a1){ 
    foreach($array2 as $a2){ 
     // Check for matching ids and is not already used 
     if($a1['entry_id']==$a2['entry_id'] and !isset($buff[$a1['entry_id']])){ 
      $array3[]=$a1; 
      $buff[$a1['entry_id']]=1; 
     } 
    } 
} 

print_r($array3); // Debug 

編輯: OP想要的對面,所以......

示例代碼(測試!):

// 2 pass filter 
// $array1 and $array2 are the inputs 
$array1=array(
    array('entry_id'=>1,'t'=>"a1"), 
    array('entry_id'=>2,'t'=>"b1"), 
    array('entry_id'=>3,'t'=>"c1"), 
); 
$array2=array(
    array('entry_id'=>1,'t'=>"a2"), 
    array('entry_id'=>2,'t'=>"b2"), 
    array('entry_id'=>4,'t'=>"d2"), 
); 

// $array3 is output 
$array3=array(); 
// Keep track of what we have already found 
$buff=array(); 

foreach($array1 as $a1) $buff[$a1['entry_id']]=array(1,$a1); 

foreach($array2 as $a2){ 
    if(isset($buff[$a2['entry_id']])){ 
      $buff[$a2['entry_id']]=array(2,$a2); 
    }else{ 
      $buff[$a2['entry_id']]=array(1,$a2); 
    } 
} 

foreach($buff as $k=>$v) if($v[0]==1) $array3[]=$v[1]; 

print_r($array3); // Debug 
+0

我的陣列不小,我剛纔刪除所有不必要的材料。 – Zaz 2013-02-19 12:42:43

+0

它有多大?你有沒有做過任何時間? – zaf 2013-02-19 12:44:47

+0

對不起,我寫錯了。我想的是相反的。我剛剛更新了它。仍然希望你能幫忙。 – Zaz 2013-02-19 15:08:55

0

試試這個:

<?php 
$arreglo1 = Array (
     Array (
      "entry_id" => 53242, 
      "site_id" => 2, 
      "channel_id" => 2, 
      "author_id" => 1 
     ), 
     Array (
      "entry_id" => 76435, 
      "site_id" => 8, 
      "channel_id" => 8, 
      "author_id" => 9, 
     ) 
    ); 

    $arreglo2 = Array (
     Array (
      "entry_id" => 89764, 
      "site_id" => 1, 
      "channel_id" => 1, 
      "author_id" => 5 
     ), 
     Array (
      "entry_id" => 53242, 
      "site_id" => 7, 
      "channel_id" => 9, 
      "author_id" => 1 
      ) 
     ); 

    $cnt = 0; 
    foreach($arreglo1 as $arr1) { 
     foreach($arreglo2 as $arr2){ 
     if ($arr1["entry_id"] == $arr2["entry_id"]) { 
     $agregarlo = FALSE; 
     break; 
     } 
     else { 
     $agregarlo = TRUE; 
     } 
     } 

     if ($agregarlo) { 
     $resultado[$cnt] = $arr1; 
     } 
     $cnt++; 
    } 

    var_dump($resultado); 
    ?> 

至極給你這個:從它

array(1) { [1]=> array(4) { ["entry_id"]=> int(76435) ["site_id"]=> int(8) ["channel_id"]=> int(8) ["author_id"]=> int(9) } } 
相關問題