php数组操作减少冗余

时间:2012-04-07 11:45:12

标签: php arrays redundancy

从数据库加载数组,如下所示:

array=>(
  0=>array(
    'id'=>1,
    'user'=>'eric',
    'text'=>'hello'
  ),
  1=>array(
    'id'=>1,
    'user'=>'eric',
     'text'=>'how are you?'
  ),
  2=>array(
    'id'=>2,
    'user'=>'john',
     'text'=>'nice to meet you'
  ),
  ......
)

正如您所看到的,数组中唯一的区别是'text'字段,所以我想创建另一个数组以减少冗余,如下所示:

array=>(
  0=>array(
   'id'=>1,
   'user'=>'eric',
   'text'=>array(
      0=>'hello',
      1=>'how are you?'
   )
 ),
  1=>array(
   'id'=>2,
   'user'=>'john',
   'text'=>array(
      0=>'nice to meet you',
   )
 ),
 ......
)

我是编程新手,我花了好几个小时试图搞清楚,但我做不到。我该怎么做到这一点?请帮忙。

3 个答案:

答案 0 :(得分:1)

代码:

<?php
     $newarray = array();

     foreach ($array as $item)
     {
          if (!isset($newarray[$item['id']])) $newarray[$item['id']] = array();

          $newarray[$item['id']][] = $item['text'];
     }
?>

这会产生这样的事情:

array (
   1 => array ("hello", "how are you?"),
   2 => array ("a","b"),
   ...
)

// where the array keys (1,2,...) will be the IDs

答案 1 :(得分:1)

数组键将为id

$new_array = array();
foreach($old_array as $value) {
    $new_array[$value['id']]['text'][] = $value['text'];
}
print_r($new_array);

答案 2 :(得分:0)

为了使它更紧凑,这个怎么样:

$new_array = array();
foreach ($old_array as $item) {
    $id = $item['id'];
    if (empty($new_array[$id]) || !in_array($item['text'], $new_array[$id])) {
        $new_array[$id][] = $item['text'];
    }
}

这也将减少给定id的重复文本。