有个数组类似于下面这样,数组是以bill_id来排序的,所以相同bill_id的会在邻近的元素
Array
(
    [0] => Array
        (
            [in_id] => 566
            [bill_id] => YT090116
            [wgt] => 13.4600
        )    [1] => Array
        (
            [in_id] => 566
            [bill_id] => YT090116
            [wgt] => 9.8200
        )    [2] => Array
        (
            [in_id] => 566
            [bill_id] => YT090120
            [wgt] => 10.0600
        )    [3] => Array
        (
            [in_id] => 566
            [bill_id] => YT090120
            [wgt] => 9.9400
        )    [4] => Array
        (
            [in_id] => 566
            [bill_id] => YT090120
            [wgt] => 6.6000
        )    [5] => Array
        (
            [in_id] => 566
            [bill_id] => YT090120
            [wgt] => 6.4400
        )    [6] => Array
        (
            [in_id] => 566
            [bill_id] => YT090114
            [wgt] => 5.3000
        )
)in_id是相同的,这个数组就是根据in_id来获取到的
现在想将这个数组弄成类似以下面这种
Array
(
  [0] => Array
    (
      [0] => Array
        (
           [in_id] => 566
           [bill_id] => YT090116
           [wgt] => 13.4600
         )
      [1] => Array
         (
           [in_id] => 566
           [bill_id] => YT090116
           [wgt] => 9.8200
          )
     )
  [1] => Array
    (
      [0] => Array
         (
           [in_id] => 566
           [bill_id] => YT090120
           [wgt] => 10.0600
         )
      [1] => Array
         (
           [in_id] => 566
           [bill_id] => YT090120
           [wgt] => 9.9400
         )
      [2] => Array
         (
           [in_id] => 566
           [bill_id] => YT090120
           [wgt] => 6.6000
         )
      [3] => Array
         (
           [in_id] => 566
           [bill_id] => YT090120
           [wgt] => 6.4400
         )
     )
    [2] => Array
        (
      [0] => Array
         (
           [in_id] => 566
           [bill_id] => YT090114
           [wgt] => 5.3000
         )
     )
)也就是把相同bill_id的分到同一数组中,并且如果相同的bill_id超过10个的话,则第11个起的10个在另一个数组中,依次类推有什么比较好的方法吗??
我想的是弄一个循环,将数组的[0]元素中的bill_id取出来,放在循环外,然后添加数组[0]到循环外的一个新数组
然后循环从数组[1]开始,和数组外的存放的bill_id进行比较,如果一样,则添加到和数组[0]相同的数组,添加前判断此数组长度是否超过10,如果超过则添加到一个新的数组
如果不同,则修改循环外的bill_id为自身的bill_id,然后添加到循环外新数组中的另一个元素,但苦于PHP新手...编程写了半天达不到想像中的效果...

解决方案 »

  1.   

    自己用很笨的方法写出来了...
    但只验证了一下...数据库中没有现成可以模拟的数据...还得填充...$j = 0; $k = 0;
    $print_info = array();
    $print_info[$j][$k] = $old_arr[0];
    $bill_id = $old_arr[0]['bill_id'];for($i = 1; $i <count($old_arr);$i++) {
      if($old_arr[$i]['bill_id'] != $bill_id) {
        $bill_id = $old_arr[$i]['bill_id'];
        $j += 1; $k = 0;
      } else if(count($print_info[$j]) == 10) {
        $j += 1; $k = 0;
      } else {
        $k += 1;
      }
      $print_info[$j][$k] = $old_arr[$i];
    }
      

  2.   

    //$old_arr 为原始数组
    foreach($old_arr as $row) {
      $out[$row['bill_id'][] = $row;
    }
    print_r($out);如果不想用 bill_id 做主键,则再
    $out = array_slice($out, 0);
      

  3.   

    但这样的话,数组里的一些其他元素都不见了...如同一bill_id的wgt元素就剩一个...
      

  4.   

    //$old_arr 为原始数组 
    foreach($old_arr as $row) 

      $out[$row['bill_id']][] = $row; 

    $out_copy = $out;
    foreach($out as $key=>$array)
    {
    if(count($array) > 10)
    {
    $out_final[$key][1] = array_splice($out[$key],0,10); 
    $out_final[$key][2] = array_splice($out_copy[$key],10,(count($array)+1)); 
    }else
    {
    $out_final[$key] = $array;
    }
    }echo "<pre>";
    print_r($out_final); 
    echo "</pre>";
      

  5.   

    刚测试不行,现在又测试了一次,貌似可以了...
    等会看看那测试不行的数据是怎么回事
    不过你说的$out = array_slice($out, 0);不起作用
    用$out = array_splice($out,0);才可以
      

  6.   

    //$old_arr 为原始数组 
    foreach($old_arr as $row) { 
      $out[$row['bill_id'][] = $row; 
    } $r = array_map('foo', $out);function foo($ar) {
      return array_chunk($ar, 10);
    }
      

  7.   

    $buffer = array();
    foreach ($a as $v){
      eval("\$check = \$v{'bill_id'};");
      (!in_array($check, $buffer) || count($res[$i]) == 10) &&  $buffer[$i++] = $check;
      $res[$i][] = $v;
    }
    print_r ($res);