本帖最后由 mafeifan 于 2013-07-10 11:02:33 编辑

解决方案 »

  1.   

    可以这样写$items = array(
        array('dna_id'=>55,'status'=>1),
        array('dna_id'=>55,'status'=>0),
        array('dna_id'=>56,'status'=>1),
        array('dna_id'=>58,'status'=>0),
        array('dna_id'=>58,'status'=>0),
        array('dna_id'=>60,'status'=>0),
        array('dna_id'=>60,'status'=>0),
        array('dna_id'=>60,'status'=>0), 
        array('dna_id'=>60,'status'=>0),
    );
    $res = array(
      'active'=> array(
        'count' => 0,
        'ids' => array()
        ),
      'completed' => array(
        'count' => 0,
        'ids' => array()
        ),
    );
    foreach($items as $v) {
      if(!in_array($v['dna_id'], $res['active']['ids'])) $res['active']['ids'][] = $v['dna_id'];
      if($v['status']) {
        if(!in_array($v['dna_id'], $res['completed']['ids'])) $res['completed']['ids'][] = $v['dna_id'];
      }else $res['completed']['ids'] = array_diff($res['completed']['ids'], array($v['dna_id']));
    }
    $res['active']['ids'] = array_diff($res['active']['ids'], $res['completed']['ids']);
    $res['active']['count'] = count($res['active']['ids']);
    $res['completed']['count'] = count($res['completed']['ids']);
    print_r($res);
    Array
    (
        [active] => Array
            (
                [count] => 3
                [ids] => Array
                    (
                        [0] => 55
                        [2] => 58
                        [3] => 60
                    )        )    [completed] => Array
            (
                [count] => 1
                [ids] => Array
                    (
                        [1] => 56
                    )        ))
      

  2.   

    foreach($items as $v){
        $arr[$v['dna_id']][]=$v['status'];
    }
    print_r($arr);
    foreach($arr as $k=>$v){
         if($v==array_filter($v,'foo')){
         $ar['completed']['count']++;
         $ar['completed']['ids'][]=$k;
    }else{
         $ar['active']['count']++;
         $ar['active']['ids'][]=$k;
    }
    }
    print_r($ar);
    function foo($v){
         return $v==1;
    }
      

  3.   

    也可以这样写,减少点判断foreach($items as $v) {
      $res['active']['ids'][] = $v['dna_id'];
      if($v['status']) {
        $res['completed']['ids'][] = $v['dna_id'];
      }else $res['completed']['ids'] = array_diff($res['completed']['ids'], array($v['dna_id']));
    }
    $res['active']['ids'] = array_unique($res['active']['ids']);
    $res['completed']['ids'] = array_unique($res['completed']['ids']);
    $res['active']['ids'] = array_diff($res['active']['ids'], $res['completed']['ids']);
    $res['active']['count'] = count($res['active']['ids']);
    $res['completed']['count'] = count($res['completed']['ids']);
      

  4.   


    <?php
    $items = array(
        array('dna_id'=>55,'status'=>1),
        array('dna_id'=>55,'status'=>0),
        array('dna_id'=>56,'status'=>1),
        array('dna_id'=>58,'status'=>0),
        array('dna_id'=>58,'status'=>0),
        array('dna_id'=>60,'status'=>0),
        array('dna_id'=>60,'status'=>0),
        array('dna_id'=>60,'status'=>0), 
        array('dna_id'=>60,'status'=>0)    
    );$ar=array();
    $arr=array();
    foreach($items as $k=>$v){
        if (!in_array($v['dna_id'], $arr) && $v['status']===0) $arr[]=$v['dna_id'];
        if (!in_array($v['dna_id'], $ar)) $ar[]=$v['dna_id'];
    }
    $a=array_diff($ar,$arr);
    $c1=count($arr);
    $c2=count($a);$o=array(
        'active'=>array('count'=>$c1,'ids'=>$arr),
        'completed'=>array('count'=>$c2,'ids'=>$a)
    );
    var_export($o);
    ?>
      

  5.   

    本帖最后由 xuzuning 于 2013-07-10 12:28:57 编辑