有没有快速的方法在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;
}
答案 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 />';