Processare un URL con PHP

NOTA

Come al solito l’ignoranza (la mia) aguzza l’ingegno: in ogni caso penso sia meglio utilizzare la funzione di libreria parse_url

Oggi facevo un po’ di prove con il PHP sdk di Facebook. Mi sono ritrovato a dover recuperare le varie parti della query string di un URL per poterle poi utilizzare nel codice. In pratica mi ritrovavo con un URL tipo:


https://graph.facebook.com/me/friends?access_token=AAACrnu&limit=20&method=GET&offset=20&__after_id=719091958

e avevo bisogno di un array di questo tipo:

array(5) {
  ["access_token"]=>
  string(7) "AAACrnu"
  ["limit"]=>
  string(2) "20"
  ["method"]=>
  string(3) "GET"
  ["offset"]=>
  string(2) "20"
  ["__after_id"]=>
  string(9) "719091958"
}

Ho scritto così questa semplice funzione:

/**
 * Returns an array with url query parts
 * @author Giustino Borzacchiello 
 *
 * From this:
 * http://domain.com?a=foo&b=bar&c=ciccio
 * to this:
 * array(3) {
 *   ["a"]=>
 *   string(3) "foo"
 *   ["b"]=>
 *   string(3) "bar"
 *   ["c"]=>
 *   string(6) "ciccio"
 * }
 *
 * @param $url Url from which get the query parts
 * 
 * */
function getUrlQueryParts($url)
{
    # Recupera la query string dell'url
    $query = parse_url($url, PHP_URL_QUERY);
    # Suddividi la stringa in corrispondenza delle &
    $queryPieces = explode('&', $query);
    # Prepara l'array da restituire
    $result = array();
    foreach($queryPieces as $query)
    {
        # Separa ogni elemento in corrispondenza del simbolo =
        # La funzione explode restituisce un array di due elementi
        $query = explode('=', $query);
        # Recupera chiave e valore
        $key = $query[0];
        $val = $query[1];
        # Salva chiave e valore nell'array risultato
        $result[$key] = urldecode($val);

    }
    return $result;
}          

Spero che sia utile! :)