繁体   English   中英

合并到单独的逗号后,php数组计数相同的键

[英]php array count same key after merge to separate comma

我使用的是codeigniter 3.x版本。

这是传递给ajax的值。

Array ( 
    [0] => 10:4 
    [1] => 11:1 
    [2] => 12:2 
    [3] => 13:3 
    [4] => 14:4 
    [5] => 15:5 
    [6] => 16:4 
    [7] => 17:3 
    [8] => 18:2 
    [9] => 19:1 
    [10] => 1:4  // duplicate
    [11] => 1:5  // duplicate
    [12] => 20:2 
    [13] => 21:3 
    [14] => 22:4 
    [15] => 23:5 
    [16] => 24:4  // duplicate
    [17] => 24:5  // duplicate
    [18] => 25:2 
    [19] => 2:5 
    [20] => 3:4 
    [21] => 4:4 
    [22] => 5:4 
    [23] => 6:3 
    [24] => 7:2 
    [25] => 8:3 
    [26] => 9:2 // duplicate
    [27] => 9:4 // duplicate
)

我想插入数据库,处理数组

首先,排序以使用natsort($ data)

1:4
1:5
2:5
3:4
4:4
5:4
6:3
7:2
8:3
9:2
10:4
11:1
12:2
13:3
14:4
15:5
16:4
17:3
18:2
19:1
20:2
21:3
22:4
23:5
24:4
24:5
25:2
25:5

很满意。

1:4
1:5

24:4
24:5

25:2
25:5

具有重复值

我的问题是

1:4
1:5
24:4
24:5
25:2
25:5

1:4,5
2:5
3:4
.
.
24:4,5
25:2,5

如何在php上处理?

这可能有帮助-

$new= [];
foreach($ar as $v) {
   $temp = explode(':', $v);
   $new[$temp[0]][] = $temp[1];
}
foreach($new as $k => $v) {
   $new[$k] = $k . ':' . implode(',', $v);
}

DEMO

$keys = array();
$list = array(
    '1:4','1:5','2:1','3:4','4:1','4:2'
);

// Seach the keys
foreach($list as $item){
    $key = substr($item,0,strpos($item, ':'));
    $val = substr($item,strpos($item, ':')+1);
    if(!isset($keys[$key])) $keys[$key] = array();
    $keys[$key][] = $val;
}

//And now you can handle how do you want
$final = array();
foreach($keys as $key => $value){
    $final[$key] = implode(',',$value);
}

var_dump($list);
var_dump($keys);
var_dump($final);

=====================输出=====================

$list:
    array (size=6)
      0 => string '1:4' (length=3)
      1 => string '1:5' (length=3)
      2 => string '2:1' (length=3)
      3 => string '3:4' (length=3)
      4 => string '4:1' (length=3)
      5 => string '4:2' (length=3)

$keys:
    array (size=4)
      1 => 
        array (size=2)
          0 => string '4' (length=1)
          1 => string '5' (length=1)
      2 => 
        array (size=1)
          0 => string '1' (length=1)
      3 => 
        array (size=1)
          0 => string '4' (length=1)
      4 => 
        array (size=2)
          0 => string '1' (length=1)
          1 => string '2' (length=1)

$final:
    array (size=4)
      1 => string '4,5' (length=3)
      2 => string '1' (length=1)
      3 => string '4' (length=1)
      4 => string '1,2' (length=3)

您可以分两步实现。

  1. 获取所有第一部分并将其设置为所有重复项的值
  2. 逆向工程以取得成果

     $a=array('1:4' ,'1:5' ,'24:4','24:5','25:2','25:5');//input here $temp=array(); $result=array(); foreach($a as $v) { $part=explode(":",$v); if(isset($temp[$part[0]])) $temp[$part[0]].=",".$part[1]; else $temp[$part[0]]=$part[1]; } foreach($temp as $k=>$v) { $result[]=$k.":".$v; } print_r($result); 

OUPTUT

Array ( [0] => 1:4,5 [1] => 24:4,5 [2] => 25:2,5 ) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM