字符串的这样的
0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|要求:
第一步:以"|"拆分 后得
0182,1,51
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
0182,1,51
... ...第二步:按第一列找出相同项,去出多余的,再将相同项的后两项分别相加 如0182,2,102
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
... ...
第三步:可按照后两列分别排序 如按第二列重大到小:
0183,96,7280
0182,2,102
0184,1,241
0185,1,1
0187,1,241
... ...

解决方案 »

  1.   

    preg_match_all('/(\d+),(\d+),(\d+)/',$str,$array);下面几个函数自己研究用法
    array_intersect_assoc()
    array_unique()//这个不一定用到
    array_sum()
    ksort()/krsort()/sort()...利用数组间的差、并、交集等计算第二步,可以避免循环
    另一种方法是match之后用循环完成后两步
      

  2.   

    $s = "0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51";//转换成数组
    foreach(explode('|', $s) as $row) {
      $tmp = explode(',', $row);
      $ar[$tmp[0]][0] += $tmp[1]; 
      $ar[$tmp[0]][1] += $tmp[2]; 
    }//排序
    foreach($ar as $v) {
      $p[] = $v[0];
    }
    array_multisort($p, SORT_DESC, $ar);//输出 
    foreach($ar as $k=>$v) {
      echo "$k,$v[0],$v[1]<br>";
    }
      

  3.   

    $s = "0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51";//转换成数组
    foreach(explode('|', $s) as $row) {
      $tmp = explode(',', $row);
      $ar[$tmp[0]][0] += $tmp[1]; //请问唠叨,这两句的思想是什么呀?
      $ar[$tmp[0]][1] += $tmp[2]; //哪位解释一下呐?
    }//排序
    foreach($ar as $v) {
      $p[] = $v[0];
    }
    array_multisort($p, SORT_DESC, $ar);//输出 
    foreach($ar as $k=>$v) {
      echo "$k,$v[0],$v[1]<br>";
    }