有一个多唯数组 
$array = array(
    'aa' => array(
               array('name'=>'test-1','id'=>5),
               array('name'=>'test-2','id'=>4),
               array('name'=>'c-1','id'=>5),
               array('name'=>'c-2','id'=>4),               array('name'=>'d-2','id'=>4),
      );
     'bb' => array(
               array('name'=>'test-1','id'=>5),
               array('name'=>'test-2','id'=>4),
               );
);
假如name 前缀相同,并且前缀相同的数据跳鼠大于2,则取其中一条,更改name为前缀字符串。如果前缀相同的数据条数为1,则取原数据。如何操作?
以上结果需要得到$array = array(
    'aa' => array(
               array('name'=>'test','id'=>5),
               array('name'=>'c','id'=>5),
             
               array('name'=>'d-2','id'=>4),
      );
     'bb' => array(
               array('name'=>'test','id'=>5),
                   );
);

解决方案 »

  1.   

    要求挺多的,呵呵,我只做出来全都得到前缀的这种,
    另外一种可能要做更多检查吧,
    头疼$array = array( 
        'aa' => array( 
                  array('name'=>'test-1','id'=>5), 
                  array('name'=>'test-2','id'=>4), 
                  array('name'=>'c-1','id'=>5), 
                  array('name'=>'c-2','id'=>4),               array('name'=>'d-2','id'=>4), 
          ),
        'bb' => array( 
                  array('name'=>'test-1','id'=>5), 
                  array('name'=>'test-2','id'=>4)
         ) 
                  
     );
     
    $arrNew = array();
                  
    foreach($array as $key=>$array1)
    {
    $arrKey = array();
    foreach($array1 as $key1=>$value1)
    {
    $curKey = $value1['name'];
    $curValue = $value1['id'];
    $strKey = substr($curKey, 0, strpos($curKey,'-'));
    if(!in_array($strKey, $arrKey))
    {
    $arrKey[] = $strKey;
    $arrNew[$key][] = array('name'=>$strKey, 'value'=>$curValue);
    }
    }
    }
    print_r($arrNew);