Joe*_*e Z 3 php arrays phpunit compare
以 PHP 中的这两个数组为例:
$array1 = [
2 => 'Search',
1 => 'Front-End / GUI'
];
$array2 = [
1 => 'Front-End / GUI',
2 => 'Search'
];
Run Code Online (Sandbox Code Playgroud)
大多数数组比较函数不关心顺序。执行 anarray_diff将导致一个空数组。
在顺序方面比较两个数组的最有效/最短/最干净的方法是什么:
$this->assertEquals( $array1, $array2 );理想情况下,在 PHPUnit 中运行应该产生如下结果:
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
- 2 => 'Search'
- 1 => 'Front-End / GUI'
+ 1 => 'Front-End / GUI'
+ 2 => 'Search'
)
Run Code Online (Sandbox Code Playgroud)
仅当所有元素都相同时,才会生成某种差异,只是顺序不同。PHPUnit 测试:
public function test...() {
$actual = someCall();
$expected = [...];
// tests for same elements
$this->assertEquals( $expected, $actual );
// tests for same order
$diff = $this->array_diff_order( $expected, $actual );
$this->assertTrue( $expected === $actual, "Failed asserting that two arrays are equal order.\n--- Expected\n+++ Actual\n@@ @@\n Array(\n$diff )" );
}
private function array_diff_order( $array1, $array2 ) {
$out = '';
while ((list($key1, $val1) = each($array1)) && (list($key2, $val2) = each($array2)) ) {
if($key1 != $key2 || $val1 != $val2) $out .= "- $key1 => '$val1' \n+ $key2 => '$val2'\n";
}
return $out;
}
Run Code Online (Sandbox Code Playgroud)
你可以只使用===运营商
$array = array(1 => "test", 2=> "testing");
$array2 = array(1 => "test", 2=> "testing");
var_dump($array === $array2);
$array2 = array(2 => "test", 1=> "testing");
var_dump($array === $array2);
Run Code Online (Sandbox Code Playgroud)
返回
boolean true
boolean false
Run Code Online (Sandbox Code Playgroud)
然后使用 array_diff_assoc() 找出差异
while ((list($key1, $val1) = each($array)) && (list($key2, $val2) = each($array2)) ) {
if($key1 != $key2 || $val1 != $val2) echo "- $key1 - $val1 \n + $key2 - $val2";
}
Run Code Online (Sandbox Code Playgroud)
应该为订单提供一些输出
使用你的数组这给了我
您可以将输出更改为您需要的任何方式