2013-07-21 5 views
0

У меня есть-фид массив, содержащий последние последователям текущего пользователя, как указано ниже:группировка данных массива, используя значение поля

$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' 
) 
); 

То, что я хочу сделать, это сократить ленту новостей, кладя элементы одного и того же день в одном массиве, пункты 1 и 2 в предыдущей таблице. Как следует:

$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' 
    ) 
    ); 

Обратите внимание, что в результате я упал массив с ключом = 2 и ключом = 1, и я поставил Идентификаторы последователей в массиве, который я поставил в новом массиве.

Есть ли функция PHP, которая может помочь?

ответ

0

Наконец-то я нашел решение, это предложение ... В будущем возможно внесение дополнительных изменений относительно возможных ошибок или исключений.

Это мой предложенное решение

$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. 
      } 
     } 

Любые улучшения, а также редактирование или предложения будут оценены

Смежные вопросы