Vd *_*d A 1 php laravel laravel-5
亲爱的StackOverflow用户.有一些问题.
Array 1:
array: 3 [?
0 => "8"
1 => "13"
2 => "15"
]
Array 2:
array: 16 [?
0 => 7
1 => 8
2 => 9
]
Run Code Online (Sandbox Code Playgroud)
array_diff不起作用,因为在第一个数字中,在第二个字符串中.
请提出解决问题的建议.任何评论我都会很高兴.非常感谢.
您可以使用array_udiff用户定义的回调来比较数组,该回调在比较之前将值转换为int:
$array1 = array('8', '13', '15');
$array2 = array(7, 8, 9);
$diffs = array_udiff($array1, $array2, function ($a, $b) { return (int)$a - (int)$b; });
print_r($diffs);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[1] => 13
[2] => 15
)
Run Code Online (Sandbox Code Playgroud)
更新
有人指出,尚未指定所需的输出,因此以下是如何获取所有唯一值:
$diffs1 = array_udiff($array1, $array2, function ($a, $b) { return (int)$a - (int)$b; });
$diffs2 = array_udiff($array2, $array1, function ($a, $b) { return (int)$a - (int)$b; });
$diffs = array_merge($diffs1, $diffs2);
print_r($diffs);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => 13
[1] => 15
[2] => 7
[3] => 9
)
Run Code Online (Sandbox Code Playgroud)
和所有匹配的值使用array_uintersect:
$same = array_uintersect($array1, $array2, function ($a, $b) { return (int)$a - (int)$b; });
print_r($same);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => 8
)
Run Code Online (Sandbox Code Playgroud)
注意
在PHP7中,现在有一个太空飞船运营商(<=>),它也可以用于比较功能,例如
$diffs = array_udiff($array1, $array2, function ($a, $b) { return (int)$a <=> (int)$b; });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |