PHP 去掉数组的重复项-不使用系统函数
思路一:根据 in_array() 函数思路,去掉函数体部分 :
function unique1($array){
$value = [];
foreach ($array as $v) {
$status = 1;
foreach ($value as $vv) {
if($v == $vv){
$status = 0;
break;
}
}
$status ? $value[] = $v : false;
}
return $value;
}
//返回值 :数组名[ 数字索引 => 值],参数 可调整为 引用:&$array
思路2:将 数组的 键名与值 调换2次:键名相同时,会覆盖数据
function unique2($array){
foreach ($array as $v) {
$arr[$v] = '';
}
$array = [];
foreach ($arr as $k => $v) {
$array[] = $k;
}
return $array;
}
//返回值 :数组名[ 数字索引 => 值],参数 可调整为 引用:&$array。仅适用于1维数组
思路三:根据 思路2 的思路,简化代码:
function unique3($array){
foreach ($array as $v) {
$arr[$v] = $v;
}
return $arr;
}
//返回值:数组名[ 值 => 值 ]; 键、值相同。仅适用于1维数组
特别说明:以上代码均没有获取 原数组的键名,若有需要,修改部分代码即可:
思路四:保留键名,递归调用。仅适用于1维数组
function unique4($array,$times=0){
foreach ($array as $k => $v) {
$arr[$v] = $k;
}
$name = __FUNCTION__;
return $times ? $arr : $name($arr,1);
}
思路五:索引数组,递归调用。仅适用于1维数组
function unique5($array,$times=0){
foreach ($array as $k => $v) {
$times ? $arr[]=$k : $arr[$v]='';
}
$name = __FUNCTION__;
return $times ? $arr : $name($arr,1);
}