2011-04-04 113 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