从数据库加载一个数组,如下所示:
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的重复文本。