php数组操作以减少冗余


php array manipulation to reduce 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'
  ),
  ......
)

正如你所看到的,数组中唯一的区别是"文本"字段,所以我想制作另一个数组来减少冗余,类似这样:

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',
   )
 ),
 ......
)

我是一个编程新手,我花了几个小时试图弄清楚,但我做不到。我怎样才能做到这一点?请帮忙。

数组键将为id

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

代码:

<?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

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

$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的重复文本。