$arr = array(
1,1,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5
);
这样一个数组,我想要给重复的值进行重新编号,组成如下数组的样子,求解
$arr2 = array(
0=>['value'=>1,'num'=>1],
1=>['value'=>1,'num'=>1],
2=>['value'=>2,'num'=>2],
3=>['value'=>2,'num'=>2],
4=>['value'=>2,'num'=>2],
5=>['value'=>2,'num'=>2],
6=>['value'=>3,'num'=>1],
7=>['value'=>3,'num'=>1],
8=>['value'=>3,'num'=>1],
9=>['value'=>4,'num'=>2],
10=>['value'=>4,'num'=>2],
11=>['value'=>4,'num'=>2],
12=>['value'=>4,'num'=>2]
);
想到办法了,不过我觉得我这样写好像有点儿繁琐,比较笨,下面是实现代码,欢迎大家提供更多思路
$arr = array(
1,1,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5
);
$newArray = [];//最后成型的新数组
$arrCount = array_count_values($arr);//获取重复的元素每个的数量
$newarrCount = array_values($arrCount);//重置重复元素数组的key
$arrCountKey = array_keys($arrCount);//获取重复元素
foreach($newarrCount as $k=>$v)//循环这个数组,根据奇偶数替换成1和2
{
if($k%2 == 0)
{
$newarrCount[$k] = 1;
}else{
$newarrCount[$k] = 2;
}
}
$finArray = [];//中间最终数组
foreach($newarrCount as $k=>$v)
{
$finArray[$arrCountKey[$k]] = $v;
}
foreach($arr as $k=>$v)
{
$newArray[$k]['value'] = $v;
$newArray[$k]['num'] = $finArray[$v];
}
var_dump($newArray);