2014-02-25 19 views
0

我想比較$badArray與數組$companyArray並創建一個名爲$goodArray的新數組。如果$companyArray包含$badArray匹配Company_Name則不要將此添加到$goodArray。我在$badArray中有1197個值,在$companyArray中有1410個值。我比較使用兩個foreach循環數組,但由於某些原因,$goodArray不能正常生成它到底應該包含213項,但只包含從$companyArray,這不是壞的最後條目。我希望這是有道理的,有人可以告訴我我做錯了什麼,以及是否有更好的方法來篩選兩個陣列?比較數組並創建新數組(如果它不包含值)

public function SortGoodFromBad($badArray, $companyArray) { 
    $goodArray = array(); 
    $i=0; 
    foreach($companyArray as $row => $value) { 
     foreach($badArray as $companyName => $companyRow) { 
      if($companyName !== $value['Company_Name']) { 
       $goodArray = array('Company Name'.$i => $value['Company_Name']); 
       $i++; 
      } else { 

      } 
     } 
    } 

    echo "<PRE>"; 
    print_r($goodArray); 
    echo "</PRE>"; 
} 
+0

你應該看看'array_diff' - 它返回兩個數組之間的區別,所以你可以使用它像'$ goodArray =和array_diff($ companyArray,$ badArray)' - HTTP: //php.net/manual/en/function.array-diff.php –

回答

2

你應該看看了http://php.net/in_arrayhttp://php.net/Array。至於你的例子,如果我理解正確的話:

function SortGoodFromBad($badArray,$companyArray) { 
    $goodArray = Array(); 
    foreach ($companyArray as $row=>$value) { 
    if (!isset($badArray[$value])) $goodArray[] = $value; 
    } 
} 

我用你使用它們的變量。如果您看到任何問題,您可以輸出print_r($ badArray)的前幾​​行和print_r($ companyArray)的前幾​​行。

+0

'$ goodArray'是一個多維數組我需要遍歷並匹配'Company_Name'。 '$ badArray'只是一個包含公司名稱的普通數組。 – Yamaha32088

+0

我的例子工作嗎? –

+0

我不得不[「COMPANY_NAME」]'的'foreach'加上'的'$ value'和是它的工作,但由於某種原因,它是一個條目短?在'$ goodArray'中應該有213個條目,但是隻有211個和0個索引使得212. – Yamaha32088

1

晚了一點,但可能有點快。你可以給它一個嘗試

function arrayDiff($arrayFrom, $arrayAgainst){ 
    $arrayAgainst = array_flip($arrayAgainst); 

    foreach ($arrayFrom as $key => $value) { 
     if(isset($arrayAgainst[$value])) { 
      unset($arrayFrom[$key]); 
     } 
    } 
    return $arrayFrom; 
} 
// example 
$badarr=array('a','b','c'); 
$comanyarr=array('a'=>1,'d'=>2,'e'=>3,'s'=>4,'c'=>5); 

print_r(arrayDiff($comanyarr,$badarr)); //Array ([a] => 1 [d] => 2 [e] => 3 [s] => 4 [c] => 5)