比较值不是相同顺序的两个数组

时间:2013-11-28 19:52:02

标签: php arrays compare

有没有快速的方法在PHP中执行类似Compare two arrays with the same value but with a different order的操作?

我的数组可能具有相同的数据,但顺序不同,我只需看看它们是否相同。

好的,事实证明我得到了一个对象,而不是一个数组,我猜......

object(Doctrine\ORM\PersistentCollection)#560 (9) etc.

嗯......最简单的方法是迭代集合的内容以创建我自己的数组,然后像你们所建议的那样进行比较?

只需为我的最终解决方案添加代码

        //Find out if container receives mediasync
        $toSync = array();
        foreach($c->getVideosToSync() as $v) {
            $toSync[] = $v->getId();
        }

        $inSync = array();
        foreach($c->getVideosInSync() as $v) {
            $inSync[] = $v->getId();
        }

        $noDiff = array_diff($toSync, $inSync);
        $sameLength = count($toSync) === count($inSync);

        if( empty($noDiff) && $sameLength ) {
           $containerHelper[$c->getId()]['syncing'] = false;
        }
        else {
            $containerHelper[$c->getId()]['syncing'] = true;    
        }

2 个答案:

答案 0 :(得分:0)

我通过以下方式解决了这个问题:

<?php

$arrayOld=array(
    '1'=>'32',
    '2'=>'34',
    '3'=>'36',
    '4'=>'38',
    '5'=>'40',
    '6'=>'42',
    '7'=>'44',
);

$arrayNew=array(
    '2'=>'32',
    '1'=>'34',
    '3'=>'36',
    '4'=>'38',
    '5'=>'46',
    '6'=>'42',
    '7'=>'44',
);

/**
 * Here we check if there is any difference in keys or values in two arrays
 * array_intersect_assoc - returns values that are same in both arrays checking values as well as keys
 * array_diff returns the difference between the arrayNew values and those same values in both arrays, returned by array_intersect_assoc
 */
$result = array_diff($arrayNew,array_intersect_assoc($arrayOld, $arrayNew));
print_r($result);


//result is:
Array ( 
    [2] => 32, 
    [1] => 34,
    [5] => 46,
)

/ **我们可以看到,值32和34的索引不同 *指数5的值也从40变为46 * /

答案 1 :(得分:-3)

使用sort()&amp;然后与array_diff()进行差异。

# Set the test data.
$array1 = array(1,2,3,4,9,10,11);
$array2 = array(3,4,2,6,7);

# Copy the arrays into new arrays for sorting/testing.
$array1_sort = $array1;
$array2_sort = $array2;

# Sort the arrays.
sort($array1_sort);
sort($array2_sort);

# Diff the sorted arrays.
$array_diff = array_diff($array1_sort, $array2_sort);

# Check if the arrays are the same length or not.
$length_diff = (count($array1) - count($array2));
$DIFFERENT_LENGTH = ($length_diff != 0) ? true : false;

# Check if the arrays are different.
$ARE_THEY_DIFFERENT = ($array_diff > 1) ? true : false;

if ($DIFFERENT_LENGTH) {
  echo 'The are different in length: ' . $length_diff;
}
else {
  echo 'They have the same length.';
}
echo '<br />';

if ($ARE_THEY_DIFFERENT) {
  echo 'They are different: ' . implode(', ', $array_diff);
}
else {
  echo 'They are not different.';
}
echo '<br />';