我有两个包含对象的数组。我想比较数组的每个属性。
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;
所有属性都是字符串。
答案 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_uintersect
或array_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);
}