简体   繁体   中英

PHP Easy way to compare two arrays: Same values, regardless of order

Just a note of previous research on SO:

At least I believe that:

Given the example:

$arr1 = [21, 23, 25];
$arr2 = [25, 21, 23];

It the easiest, nondestructive manner to compare these for equal values, regardless of order

$arr1s = $arr1;
$arr2s = $arr2;

sort($arr1s, SORT_NUMERIC);
sort($arr2s, SORT_NUMERIC);

$isSameValues = ($arr1s === $arr2s);

Or is there an easier, cleaner way to do this?

Use array_count_values , which is O(n) vs O(n log n) for sorting

$a = [1, 1, 3, 2];
$b = [1, 2, 2, 3];
var_dump (array_count_values($b) == array_count_values($a)); //false

Note: this only works with arrays where all values are strings or ints.

You were very near to the right solution! Here is your code fixed:

$arr1 = [21, 23, 25];
$arr2 = [25, 21, 23];

$arr1s = $arr1;
$arr2s = $arr2;

sort($arr1s, SORT_NUMERIC);
sort($arr2s, SORT_NUMERIC);

$isSameValues = ($arr1 == $arr2);

See it working here: http://sandbox.onlinephpfunctions.com/code/b737d3a9cf45e077a0d1f2c0195f389b81ace4a3

If the two arrays have same keys and values, a == is enough, as shown here :

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM