【问题标题】:php array count same key after merge to separate comma合并后php数组计数相同的键以分隔逗号
【发布时间】:2015-10-07 08:06:53
【问题描述】:

我使用的是 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

is 有重复值

我的问题是

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上应该如何处理?

【问题讨论】:

  • 重复值从哪里来?来自您的数据库?

标签: php arrays codeigniter sorting


【解决方案1】:

这可能会有所帮助 -

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

DEMO

【讨论】:

    【解决方案2】:
    $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)
    

    【讨论】:

      【解决方案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);
        

      输出

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        相关资源
        最近更新 更多