如何将字符串数组与数字数组进行比较?

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不起作用,因为在第一个数字中,在第二个字符串中.

请提出解决问题的建议.任何评论我都会很高兴.非常感谢.

Nic*_*ick 5

您可以使用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)