我正在尝试使用比较2数组的PHP函数,如果它们相同则返回true。
示例:
assertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2)); // True
assertArrayEquals(array('a'=>1, 'b'=>2), array('b'=>2, 'a'=>1)); // True
assertArrayEquals(array('a'=>1, 'b'=>2), array(1, 2)); // false
assertArrayEquals(array(2, 1), array(1, 2)); // false
有什么想法吗?
编辑: 其他测试案例:
assertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2, 'c'=>3)); // false
assertArrayEquals(array('a'=>1, 'b'=>2, 'c'=>3), array('a'=>1, 'b'=>2)); // false
assertArrayEquals(array('a'=>0), array('a'=>'foo')); // false
答案 0 :(得分:3)
<?php
var_dump(assertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2))); // True
var_dump(assertArrayEquals(array('a'=>1, 'b'=>2), array('b'=>2, 'a'=>1))); // True
var_dump(assertArrayEquals(array('a'=>1, 'b'=>2), array(1, 2))); // false
var_dump(assertArrayEquals(array(2, 1), array(1, 2))); // false
function assertArrayEquals($a, $b){
return count(array_diff_assoc($a,$b)) == 0 && count(array_diff_assoc($b,$a)) == 0;
}
答案 1 :(得分:2)
结帐http://php.net/array_diff和http://php.net/array_intersect
或者如果你想做的就是检查是否平等:
对两个数组进行排序并使用===进行检查(或= = =如果你是一个害怕的小猫)
答案 2 :(得分:1)
使用==
。
$a == $b
- Equality - 如果$ a和$ b具有相同的键/值对,则为TRUE。
示例4不会传递,因为键/值对不相同:
0 => 2, 1 => 1
vs 0 => 1, 1 => 2
。
编辑:
如果数组包含不同的变量类型,请使用
function assertArrayEquals($a, $b) {
asort($a);
asort($b);
return $a === $b;
}
即使对于评论中的示例,这也会给出预期的结果:
echo (int)assertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2)); // true
echo (int)assertArrayEquals(array('a'=>1, 'b'=>2), array('b'=>2, 'a'=>1)); // true
echo (int)assertArrayEquals(array('a'=>1, 'b'=>2), array(1, 2)); // false
echo (int)assertArrayEquals(array(2, 1), array(1, 2)); // false
echo (int)assertArrayEquals(array('a'=>0,'b'=>1), array('a'=>'cake','b'=>1)); // false
echo (int)assertArrayEquals(array('a'=>'0','b'=>1), array('a'=>'cake','b'=>1)); // false
答案 3 :(得分:1)
看起来您希望确保数组具有相同的键/值对(严格类型),但不一定按相同的顺序排列。因此,使订单保持一致并严格比较。
function assertArrayEquals($a, $b)
{
ksort($a); ksort($b);
return ($a === $b);
}
通过测试,
testAssertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2), true);
testAssertArrayEquals(array('a'=>1, 'b'=>2), array('b'=>2, 'a'=>1), true);
testAssertArrayEquals(array('a'=>1, 'b'=>2), array(1, 2), false);
testAssertArrayEquals(array(2, 1), array(1, 2), false);
testAssertArrayEquals(array('a'=>1, 'b'=>2), array('a'=>1, 'b'=>2, 'c'=>3), false);
testAssertArrayEquals(array('a'=>1, 'b'=>2, 'c'=>3), array('a'=>1, 'b'=>2), false);
testAssertArrayEquals(array('a'=>0,'b'=>1), array('a'=>'cake','b'=>1), false); // Extra
function testAssertArrayEquals($a, $b, $expected)
{
$result = assertArrayEquals($a, $b);
echo "Got " . var_export($result,1) . " expected " . var_export($expected,1) . PHP_EOL;
}
// Got true expected true
// Got true expected true
// Got false expected false
// Got false expected false
// Got false expected false
// Got false expected false
// Got false expected false
我还建议选择一个更好的功能名称,从长远来看,你目前的选择不会给你任何好处!
答案 4 :(得分:0)
function assertArrayEquals($array1, $array2) {
return !array_diff($array1, $array2) and !array_diff($array2, $array1);
}
基本上我们使用array_diff()检查两个给定数组之间的差异。如果没有,那么它们是平等的。
尽管形式很简洁,但您可以使用简单的==
来比较两个数组。
这是一些经过测试的样本:
echo (array('a'=>1, 'b'=>2) == array('a'=>1, 'b'=>2)) ? 'true' : 'false'; // true
echo (array('a'=>1, 'b'=>2) == array('b'=>2, 'a'=>1)) ? 'true' : 'false'; // true
echo (array('a'=>1, 'b'=>2) == array(1, 2)) ? 'true' : 'false'; // false
echo (array(2, 1) == array(1, 2)) ? 'true' : 'false'; // false
此脚本输出:truetruefalsefalse
;
答案 5 :(得分:0)
PHP有一个功能。
$result = array_diff($array1, $array2);
$ result将返回数组中不同的所有内容。如果它们是相同的,它将不会返回任何内容。