0

从数据库加载一个数组,它看起来像这样:

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

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

4

3 回答 3

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
于 2012-04-07T11:48:34.260 回答
1

数组键将是id

$new_array = array();
foreach($old_array as $value) {
    $new_array[$value['id']]['text'][] = $value['text'];
}
print_r($new_array);
于 2012-04-07T11:53:20.550 回答
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 的重复文本。

于 2012-04-07T12:11:31.350 回答