$a = array(
'0'=>array(
'id'=>'0',
'title'=>'no1',
'editor'=>'zhangsan',
),
'1'=>array(
'id'=>'1',
'title'=>'no2',
'editor'=>'lisi',
),
'2'=>array(
'id'=>'2',
'title'=>'no3',
'editor'=>'zhangsan',
),
);
查找$a[n]['editor']相同的元素,并将$a[n]['editor']修改成第一次出现的加上1,第二次出现,加上2.如下;
$a = array(
'0'=>array(
'id'=>'0',
'title'=>'no1',
'editor'=>'zhangsan1',
),
'1'=>array(
'id'=>'1',
'title'=>'no2',
'editor'=>'lisi',
),
'2'=>array(
'id'=>'2',
'title'=>'no3',
'editor'=>'zhangsan2',
),
);

解决方案 »

  1.   


    <?php/* Created on [2012-5-3] Author[yushuai.niu] */
    $a = array (
    '0' => array (
    'id' => '0',
    'title' => 'no1',
    'editor' => 'zhangsan', ),
    '1' => array (
    'id' => '1',
    'title' => 'no2',
    'editor' => 'lisi', ),
    '2' => array (
    'id' => '2',
    'title' => 'no3',
    'editor' => 'zhangsan', ),);$i = 1;
    foreach($a as $j => $b){
    foreach($b as $k => $c){
    if($c == "zhangsan"){
    $c .= $i;
    $i++;
    }
    $d[$j][$k] = $c;
    }
    }
    print_r($d);
    #Array ( [0] => Array ( [id] => 0 [title] => no1 [editor] => zhangsan1 ) [1] => Array ( [id] => 1 [title] => no2 [editor] => lisi ) [2] => Array ( [id] => 2 [title] => no3 [editor] => zhangsan2 ) ) 
    ?>
      

  2.   

    $a = array(
    '0'=>array(
    'id'=>'0',
    'title'=>'no1',
    'editor'=>'zhangsan',
    ),
    '1'=>array(
    'id'=>'1',
    'title'=>'no2',
    'editor'=>'lisi',
    ),
    '2'=>array(
    'id'=>'2',
    'title'=>'no3',
    'editor'=>'zhangsan',
    )
    );// 寄存每组editor的值和对应的键值
    $arr = array();
    foreach($a as $key=>&$value)
    {
        $k = array_search($value['editor'], $arr);
        
        if($k !== false){
           // 获取最近一次发现相同值时的后缀数字
           $i = substr($a[$k]['editor'], -1, 1);
           // 还没有后缀数字的算1
           if( ! is_numeric($i) ) {
               $i = 1;
               // 修改上一次的
               $a[$k]['editor'] .= $i++;
           }
           // 修改本次的发现的重复值
           $value['editor'] .= $i;
        }
        $arr[$key] = $value['editor'];
    }
    print_r($arr);
      

  3.   

    又分析了一下上面的算法,发现有bug。有点难不另写了
      

  4.   

    这样写,应该还有优化的余地$a = array (
        '0' => array (
            'id' => '0',
            'title' => 'no1',
            'editor' => 'zhangsan',
        ),
        '1' => array (
            'id' => '1',
            'title' => 'no2',
            'editor' => 'lisi',
        ),
        '2' => array (
            'id' => '2',
            'title' => 'no3',
            'editor' => 'zhangsan',
        ),
    );foreach($a as $i=>$v) $d[$i] = $v['editor'];
    foreach(array_count_values($d) as $k=>$v) {
      if($v > 1) {
        $p = 1;
        foreach($d as $i=>$v)
          if($v == $k) $a[$i]['editor'] .= $p++;
      }
    }
    print_r($a);Array
    (
        [0] => Array
            (
                [id] => 0
                [title] => no1
                [editor] => zhangsan1
            )    [1] => Array
            (
                [id] => 1
                [title] => no2
                [editor] => lisi
            )    [2] => Array
            (
                [id] => 2
                [title] => no3
                [editor] => zhangsan2
            ))
      

  5.   

    少一重循环foreach($a as $i=>$v) $d[$i] = $v['editor'];
    arsort($d);
    $t = 1;
    $i = 0;
    while($t) {
      $k = key($d);
      if(current($d) == ($t = next($d)) || $i) {
        if(! $t) $i = 0;
        else $a[$k]['editor'] .= ++$i;
      }
    }