在PHP中,数组去重时对数字和字符串的比较存在一些差异,主要体现在PHP的类型转换和比较规则上。以下是具体的差异和注意事项:
"123" 和整数 123 在比较时会被视为相等。这意味着,如果数组中同时存在 "123" 和 123,使用 array_unique() 函数去重时,它们会被认为是重复的,只保留其中一个。
示例:
$array = [123, "123", "456", 456];
$uniqueArray = array_unique($array);
print_r($uniqueArray);
输出:
Array
(
[0] => 123
[2] => 456
)
"123" 和 123 被视为重复,只保留了 123。array_unique() 的 SORT_STRING 模式。在这种模式下,PHP会将所有元素转换为字符串后再进行比较,因此 123 和 "123" 会被视为不同的值。
示例:
$array = [123, "123", "456", 456];
$uniqueArray = array_unique($array, SORT_STRING);
print_r($uniqueArray);
输出:
Array
(
[0] => 123
[1] => 123
[2] => 456
[3] => 456
)
123 和 "123" 被视为不同的值,因此都被保留。如果你需要更复杂的去重逻辑(例如区分数字和字符串),可以手动遍历数组并使用严格比较(===)来判断是否重复。
示例:
$array = [123, "123", "456", 456];
$uniqueArray = [];
foreach ($array as $value) {
if (!in_array($value, $uniqueArray, true)) {
$uniqueArray[] = $value;
}
}
print_r($uniqueArray);
输出:
Array
(
[0] => 123
[1] => 123
[2] => 456
[3] => 456
)
in_array() 的严格模式(第三个参数为 true),确保 123 和 "123" 被视为不同的值。array_unique() 函数会对数字和字符串进行自动类型转换,因此 123 和 "123" 会被视为重复。SORT_STRING 模式或手动实现去重逻辑。===)可以确保数字和字符串不被视为相同。根据你的需求选择合适的去重方式即可。