2011-04-04 115 views
0

我是PHP編程的新手。我使用FQL查詢來獲取所有用戶的朋友的生日。 但我想根據月份和日期對用戶進行排序。這可以在多維數組中嗎?我想要:使用FQL的Facebook PHP SDK生日APP

$year = array('jan' => array('1' => array(data returned by fql query), '2' => array(data returned by fql query),..etc), 'feb' => array('1' => array(data returned by fql query)), 'mar' => array(), etc); 

這可能嗎? 我迄今爲止代碼:

$query = "SELECT uid, first_name, last_name, birthday_date, sex, pic_square, current_location, hometown_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND strlen(birthday_date) != 0 ORDER BY birthday_date"; 

$year =array(); 
$prm = array(
      'method' => 'fql.query',  
      'query'  => $query, 
      'callback' => ''  
     ); 



$friends = $facebook->api($prm); 

for($m = 1;$m <= 12;$m++){ 
    $dm = mktime(0,0,0,$m,26); 
    $dm = date("M", $dm); 
    $year[] = $dm; 

    for($d = 1;$d <= 31;$d++){ 
     $a2 = array($d => array()); 
     $a3 = $out[$dm]; 
     array_push($out,array($dm => array($d => ""))); 
    }     
} 

PS:我希望能夠通過月的一天,以表示每個月的生日在一個div,訂購。 謝謝。

+0

爲什麼你不想使用order by子句? – 2011-04-04 17:06:54

回答

0

或者你可以讓天/月的數組鍵和排序基於一個:

$sort = array(); 
foreach($friends as $friend) 
{ 
    // note the extra 0's here, to give us padding to filter out duplicate array keys 
    // this gives us an int in the format 030100, 093100, etc 
    $key = (int)date('Md00', strtotime($friend['birthday_date'])); 

    // make sure we don't have duplicates...if the key already exists, incrememnt it by one 
    while(isset($sort[$key])) $key++; 

    $sort[$key] = $friend; 
} 

// sort the items by array key 
ksort($sort); 

// $sort now contains your friends, sorted by birthday. 

注意,如前所述,Facebook允許你做的做他們的最終排序,所以最好讓他們做這項工作。在某些情況下,查詢後排序非常有用,這通常是我喜歡做的。

1

multi_sort($ myArray [index],SORT_NUMERIC,SORT_ASC)是您正在查找的內容,您可以擺脫嵌套for循環。傳遞數組和索引以進行排序,按數字排序,並在SORT_ASC或SORT_DESC中根據您的需要進行排序。您可能需要先從日期中刪除破折號或斜槓,然後進行實驗並找出結果。

這是PHP手冊頁。 http://php.net/manual/en/function.array-multisort.php