Home > Article > Backend Development > PHP array operation deduplication T.T
Masters, my array looks like this
array(2) {
[14] => array(6) {
<code>["job_name"] => string(44) "苹果,香蕉,苹果"</code>
}
[3] => array(6) {
<code>["job_name"] => string(44) "梨子,梨子,西红柿"</code>
}
}
I want it to be
array(2) {
[14] => array(6) {
<code>["job_name"] => string(44) "苹果2,香蕉1"</code>
}
[3] => array(6) {
<code>["job_name"] => string(44) "梨子2,西红柿1"</code>
}
}
Is this Jiang Zi difficult? T.T Does anyone know how to do it? Q.Q
Masters, my array looks like this
array(2) {
[14] => array(6) {
<code>["job_name"] => string(44) "苹果,香蕉,苹果"</code>
}
[3] => array(6) {
<code>["job_name"] => string(44) "梨子,梨子,西红柿"</code>
}
}
I want it to be
array(2) {
[14] => array(6) {
<code>["job_name"] => string(44) "苹果2,香蕉1"</code>
}
[3] => array(6) {
<code>["job_name"] => string(44) "梨子2,西红柿1"</code>
}
}
Is this Jiang Zi difficult? T.T Does anyone know how to do it? Q.Q
<code class="php">array_walk($arr, function(&$item) { $item['job_name'] = join(',', array_unique(explode(',', $item['job_name']))); });</code>
I didn’t see the question clearly, here is the revised answer
<code class="php">array_walk($arr, function(&$item) { $after = array_values(array_unique(explode(',', $item['job_name']))); foreach ($after as $key=>$value) { preg_match_all("/$value/", $item['job_name'], $matches); $after[$key] = $value . count($matches[0]); } $item['job_name'] = join(',', $after); });</code>
It means that the job_name
field in this two-dimensional array, if there are duplicates, just set the corresponding number of repetitions after the repetition, right?
<code class="php">foreach ($arr as $fruits){ $fruits_array = explode(',',$fruits['job_name']); $count_array = array(); foreach ($fruits_array as $fruit){ $count_array[$fruit][] =1; } $sum_data =array(); foreach ($count_array as $fruit=>$fruit_array){ $sum_data[] = $fruit. count($fruit_array); } $sum_data = implode(',',$sum_data); $return_data[]["job_name"] = $sum_data; }</code>
<code>function dealArr($arr=array()){ foreach ($arr as $key => $value) { $a0[$key] = explode(',',$value['job_name']);//分割字符串 $a1[$key] = array_count_values($a0[$key]);//统计个数 $temp=array(); foreach ($a1[$key] as $key2 => $value2) { $temp[$key2]=$key2.$value2; } $res[$key]['job_name']=implode(',',$temp);//字符串转数组 } return $res; }</code>
Error checking related to input arrays has not been processed yet
<code>$arr[14]['job_name']="苹果,香蕉,苹果"; $arr[3]['job_name']="梨子,梨子,西红柿"; var_dump(dealArr($arr)); </code>
<code>foreach ($arr as &$val){ $job_name_array = explode(',',$val['job_name']); $return = array_count_values($job_name_array); $str = ''; foreach ($return as $key => $value){ $str .= $key.$value.','; } $str = rtrim($str,","); $val['job_name'] = $str; }</code>