比较两个 PHP 数组的值

3

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

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;

所有属性都是字符串。


你能否更新你的问题并附上对象属性? - Harish Lalwani
这里是属性。 - mk2015
一个 PHP 数组是否可以实际持有一个类的实例,以便您可以调用像 getCompany() 这样的方法?我只是问这个问题,因为我自己不确定。 - Ole Haugset
是的,我已经测试过了。 - mk2015
1
在我看来,你的方法是正确的,我会为此点赞。在比较或使用任何方法之前,我的建议是尝试在嵌套的“for循环”中打印出两个数组的内容,以查看是否获得了相同的输出。如果是这样,那么就在嵌套的“for循环”之外取出2个值并将它们Levenstein到你的if语句中,以查看它是否有效。最后,你可以把拼图放在一起。 - Maytham Fahmi
谢谢您的建议。使用Levenshtein函数可以正常工作,但是我该如何将正确的值放入$uniqueArray中呢?我的代码是:if (levenshtein($array1[$i]->getCompany(), $array2[$j]->getCompany()) < 3){ $uniqueArray [] = $array1[$i]; } 但这会将33个值放入其中,这太多了。我的两个数组中只有15个对象。 - mk2015
2个回答

3

在迭代数组时,不应使用for (expr1; expr2; expr3),最好使用foreach (array_expression as $value)。此外,您正在将数组1的每个元素与数组2的每个元素进行比较,但如果有匹配项,则稍后再次对它们进行比较。尝试像下面这样做:

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

或者您可以对 array_uintersectarray_walk 进行一些研究。


到目前为止,非常感谢!当我想要将这两个值添加到$uniqueArray中时,我需要将$uniqueArray[] = $v2; 添加到代码中,对吗? - mk2015
1
[] 将元素添加到数组中,$v2 是第二个数组的值。 - Voro

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接