如果数组不包含值,则比较数组并创建新数组

时间:2014-02-25 19:22:29

标签: php arrays

我正在尝试将$badArray与数组$companyArray进行比较,并创建一个名为$goodArray的新数组。如果$companyArray包含来自Company_Name的匹配$badArray,请不要将其添加到$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>";
}

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分: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 )