最直接的方法是使用explode()将字符串转数组,再用array_unique()去重,但需结合trim()、array_filter()等预处理以处理空格、空值和大小写问题,确保去重结果准确。

将PHP字符串转换为数组后进行去重,最直接且常用的方法是先使用
explode()
array_unique()
array_unique()
从一个包含重复元素的字符串开始,比如用户输入的一串标签,或者从日志中解析出的数据,我们的目标是得到一个干净、无重复的列表。
<?php
// 原始字符串,可能包含多余的空格、空项或大小写不一致的重复项
$inputString = "apple, banana, orange, Apple, banana , ";
// 步骤一:将字符串按逗号分隔成数组
// 这里可能出现的问题是,如果字符串末尾或中间有连续的逗号,会产生空字符串元素。
$tempArray = explode(',', $inputString);
// 步骤二:清洗数组元素
// 遍历数组,对每个元素进行 trim() 操作,去除首尾空白。
// 同时,我们可以用 array_filter() 移除清洗后可能产生的空字符串。
$cleanedArray = array_map('trim', $tempArray);
$filteredArray = array_filter($cleanedArray, function($value) {
return $value !== ''; // 确保不是空字符串
});
// 步骤三:处理大小写不敏感的去重(如果需要)
// 如果 'Apple' 和 'apple' 应该被视为同一个,我们需要在去重前将所有元素统一转换为小写(或大写)。
$lowerCaseArray = array_map('strtolower', $filteredArray);
// 步骤四:使用 array_unique() 进行去重
$uniqueArray = array_unique($lowerCaseArray);
// 最终得到去重后的数组
print_r($uniqueArray);
/*
预期输出:
Array
(
[0] => apple
[1] => banana
[2] => orange
)
*/
// 如果不需要大小写不敏感去重,可以直接对 $filteredArray 进行 array_unique()
// $caseSensitiveUniqueArray = array_unique($filteredArray);
// print_r($caseSensitiveUniqueArray);
/*
预期输出:
Array
(
[0] => apple
[1] => banana
[2] => orange
[3] => Apple
)
*/
?>这个流程涵盖了从原始字符串到最终去重数组的常见清洗和处理步骤。关键在于
explode()
array_unique()
array_map()
array_filter()
这简直是家常便饭,每次从用户输入或者日志里拿到一串逗号分隔的字符串,总会遇到这些“小妖精”:多余的空格、连续的分隔符导致的空值。如果不处理,它们会直接影响
array_unique()
立即学习“PHP免费学习笔记(深入)”;
最常见的做法是组合使用
trim()
array_filter()
去除空白字符 (trim()
explode()
trim()
array_map()
trim()
$strWithSpaces = " apple , banana , orange ";
$exploded = explode(',', $strWithSpaces); // 得到 [" apple ", " banana ", " orange "]
$trimmed = array_map('trim', $exploded); // 得到 ["apple", "banana", "orange"]
print_r($trimmed);移除空字符串 (array_filter()
explode()
["apple", "", "banana", ""]
array_filter()
array_filter()
false
null
0
""
[]
$arrayWithEmpty = ["apple", "", "banana", null, "0", 0]; $filtered = array_filter($arrayWithEmpty); // 得到 ["apple", "banana", "0"] print_r($filtered);
0
false
$arrayWithEmptyAndZeros = ["apple", "", "banana", "0", 0, false];
$filteredStrictlyEmpty = array_filter($arrayWithEmptyAndZeros, function($value) {
return $value !== ''; // 只移除严格的空字符串
});
print_r($filteredStrictlyEmpty); // 得到 ["apple", "banana", "0", 0, false]更强大的分割(preg_split()
preg_split()
$complexString = " apple , banana , orange , , ";
// 使用正则表达式匹配逗号及其周围的零个或多个空白字符,并忽略空匹配项
$cleanedAndSplit = preg_split('/\s*,\s*/', $complexString, -1, PREG_SPLIT_NO_EMPTY);
print_r($cleanedAndSplit); // 得到 ["apple", "banana", "orange"]PREG_SPLIT_NO_EMPTY
array_filter()
说实话,
array_unique
根据PHP官方文档,
array_unique()
===
$elem1
$elem2
(string) $elem1 === (string) $elem2
这意味着:
整数和字符串数字:
1
"1"
(string)1
"1"
(string)"1"
"1"
"1" === "1"
$mixedArray = [1, "1", 2, "2"]; $unique = array_unique($mixedArray); print_r($unique); // 得到 [1, 2]
布尔值和空字符串/null:
false
""
(string)false
""
"" === ""
null
""
(string)null
""
0
false
(string)0
"0"
(string)false
""
"0" === ""
$boolMixedArray = [false, "", null, 0]; $uniqueBool = array_unique($boolMixedArray); print_r($uniqueBool); // 得到 [false, 0] (false, "", null 都会被视为 "",只保留第一个false)
这里需要特别注意,如果你的数组中可能包含
false
null
array_unique()
浮点数: 浮点数也会被转换为字符串进行比较。
1.0
"1"
(string)1.0
"1"
(string)"1"
"1"
1.0
1
1.0
1
(string)"1"
array_unique([1.0, 1, "1.0", "1"])
[1.0]
总结和应对策略:
array_unique()
1
"1"
array_unique()
serialize()
in_array($value, $newArray, true)
当然,PHP 的工具箱里可不止
array_unique
利用 array_flip()
array_keys()
array_flip()
array_flip()
array_keys()
$data = ['apple', 'banana', 'orange', 'apple', 'grape']; $uniqueByFlip = array_keys(array_flip($data)); print_r($uniqueByFlip); // 得到 ['banana', 'orange', 'apple', 'grape'] - 注意:这里'apple'保留的是最后一个
array_unique()
array_unique()
使用 foreach
$data = ['Apple', 'banana', 'orange', 'apple', 'grape'];
$newUniqueArray = [];
foreach ($data as $item) {
// 如果需要大小写不敏感去重,可以先处理
$processedItem = strtolower($item);
if (!in_array($processedItem, $newUniqueArray)) { // 也可以使用 array_search 或 isset($hashTable[$processedItem])
$newUniqueArray[] = $processedItem;
}
}
print_r($newUniqueArray); // 得到 ['apple', 'banana', 'orange', 'grape']in_array($value, $newArray, true)
in_array()
isset($hashTable[$item])
针对对象数组的去重
array_unique()
array_unique()
以上就是PHP字符串转数组后如何去重?array_unique的正确使用方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号