Php 使用字段值对数组数据进行分组
我有一个数组newsfeed,其中包含当前用户的最后追随者,如下所示:Php 使用字段值对数组数据进行分组,php,arrays,sorting,grouping,Php,Arrays,Sorting,Grouping,我有一个数组newsfeed,其中包含当前用户的最后追随者,如下所示: $newsFeed=array( 1 => array( 'follower'=>'1', 'following'=>'5', 'datecreation'=>'2013-07-12 15:10:34' ), 2=>array( 'follower'=>'6', 'following'=>'5', 'datecreation'=>'2013-07-12 12:30:56' ),
$newsFeed=array(
1 => array(
'follower'=>'1',
'following'=>'5',
'datecreation'=>'2013-07-12 15:10:34'
),
2=>array(
'follower'=>'6',
'following'=>'5',
'datecreation'=>'2013-07-12 12:30:56'
),
3=>array(
'follower'=>'7',
'following'=>'5',
'datecreation'=>'2013-05-12 19:08:00'
)
);
$newsFeed=array(
1 => array(
'follower'=>array('1','6'),
'following'=>'5',
'datecreation'=>'2013-07-12'
),
3=>array(
'follower'=>'7',
'following'=>'5',
'datecreation'=>'2013-05-12 19:08:00'
)
);
我想做的是缩短新闻提要,将当天的项目放在一个数组中,将项目1和2放在上一个表中。详情如下:
$newsFeed=array(
1 => array(
'follower'=>'1',
'following'=>'5',
'datecreation'=>'2013-07-12 15:10:34'
),
2=>array(
'follower'=>'6',
'following'=>'5',
'datecreation'=>'2013-07-12 12:30:56'
),
3=>array(
'follower'=>'7',
'following'=>'5',
'datecreation'=>'2013-05-12 19:08:00'
)
);
$newsFeed=array(
1 => array(
'follower'=>array('1','6'),
'following'=>'5',
'datecreation'=>'2013-07-12'
),
3=>array(
'follower'=>'7',
'following'=>'5',
'datecreation'=>'2013-05-12 19:08:00'
)
);
注意,在结果中,我删除了key=2和key=1的数组,并将追随者的ID放入一个数组中,然后放入一个新数组中
是否有一个PHP函数可以提供帮助 最后,我找到了解决方案,这是一个建议方案。。。将来可能会对可能出现的错误或异常进行更多的编辑 这是我建议的解决办法
$creationDate1 = false;
foreach ($newsFeed as $key => $feed) {
/* * **followers** */
if ($feed['type'] == 'follow') { //test if the current row is a follow type
$creationDate = DateTime::createFromFormat("Y-m-d H:i:s", $feed['creationdate']);
$creationDate = $creationDate->format('Y-m-d'); //drop H:i:s from date
if ($creationDate != $creationDate1) {
$followKey = $key;
$followersArray = array();
}
$followersArray[] = $feed['follower']; //array for followers ids
unset($newsFeed[$key]);//remove the current row
if ($creationDate != $creationDate1) { // if follow has not the same date as the previous one
$newsFeed[$followKey] = array(
'follower' => $followersArray,
'following' => $feed['following'],
'creationdate' => $feed['creationdate']
);//add row, with the datetime
} else { //add row, with date, and without time.
$newsFeed[$followKey] = array(
'follower' => $followersArray,
'following' => $feed['following'],
'creationdate' => $creationDate
);
}
$creationDate1 = $creationDate; //$creationDate1=date of the current row.
}
}
任何改进,以及编辑或建议将不胜感激