php - grouping array data using a field value -
i have array newsfeed containing last followers of current user, follows:
$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' ) );
what want do, shorten news feed, puting items of same day in 1 array , item 1 , 2 in previous table. follows:
$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' ) );
notice in result, dropped array key=2 , key=1, , put followers' ids in array, put in new array.
is there php function can ?
finally, found solution, suggested 1 ... more edits may come in future regarding possible errors or exceptions.
this suggested solution
$creationdate1 = false; foreach ($newsfeed $key => $feed) { /* * **followers** */ if ($feed['type'] == 'follow') { //test if current row follow type $creationdate = datetime::createfromformat("y-m-d h:i:s", $feed['creationdate']); $creationdate = $creationdate->format('y-m-d'); //drop h:i:s date if ($creationdate != $creationdate1) { $followkey = $key; $followersarray = array(); } $followersarray[] = $feed['follower']; //array followers ids unset($newsfeed[$key]);//remove current row if ($creationdate != $creationdate1) { // if follow has not same date previous 1 $newsfeed[$followkey] = array( 'follower' => $followersarray, 'following' => $feed['following'], 'creationdate' => $feed['creationdate'] );//add row, datetime } else { //add row, date, , without time. $newsfeed[$followkey] = array( 'follower' => $followersarray, 'following' => $feed['following'], 'creationdate' => $creationdate ); } $creationdate1 = $creationdate; //$creationdate1=date of current row. } }
any improvements, edits or suggestions appreciated
Comments
Post a Comment