比较两个数组PHP的值

时间:2015-08-10 07:09:19

标签: php levenshtein-distance

我有两个包含对象的数组。我想比较数组的每个属性。

function compare ($array1, $array2)
{
        $uniqueArray = array();
        for ($i = 0; $i < count($array1); $i++)
        {
            for ($j = 0; $j < count($array2); $j++)
            {
                if(levenshtein($array1[$i]->getCompany(), $array2[$j]-     >getCompany() > 0 || levenshtein($array1[$i]->getCompany(), $array2[$j]->getCompany()) < 3))
                {
                    //add values to $unqiueArray    
                }
            }
        }
        print_r($uniqueArray);
}

我不确定我的代码是否正确。对数组的迭代然后是比较是正确的方法吗?

对象属性:

private $_company;
private $_firstname;
private $_sirname;
private $_street;
private $_streetnumber;
private $_plz;
private $_place;

所有属性都是字符串。

2 个答案:

答案 0 :(得分:3)

你不应该使用for (expr1; expr2; expr3)来迭代数组;使用foreach (array_expression as $value)会更好 此外,您将array1上的每个元素与array2上的每个元素进行比较,但如果匹配,则稍后再次比较它们。 试试这样的事情

foreach($array1 as $k1 => $v1) {
    foreach($array2 as $k2 => $v2) {
        if(your_condition()) {
            $uniqueArray[] = $v1;
            unset($array2[$k2])
        }
    }
}

或者可以对array_uintersectarray_walk

进行一些研究

答案 1 :(得分:0)

  • if中,一个括号错位,这可能是主要问题并且会产生意外结果。
  • levenstein不是一个简单的操作,你不应该做两次只是为了比较它,最好将结果存储在一个变量中。
  • 如果没有关于输入和预期输出的更多详细信息,则无法为您提供更多帮助。

这是修复后的代码。

function compare ($array1, $array2)
{
        $uniqueArray = array();
        for ($i = 0; $i < count($array1); $i++)
        {
            for ($j = 0; $j < count($array2); $j++)
            {
                $companyNamesLevenstein = levenshtein($array1[$i]->getCompany(), $array2[$j]->getCompany());
                if($companyNamesLevenstein > 0 || $companyNamesLevenstein < 3)
                {
                    $uniqueArray [] = $array1[$i];  
                }
            }
        }
        print_r($uniqueArray);
}