it-swarm.com.de

PHP Funktion zum Erstellen einer Abfragezeichenfolge aus einem Array

Ich suche nach dem Namen der Funktion PHP, um eine Abfragezeichenfolge aus einem Array von Schlüsselwertpaaren zu erstellen. Bitte beachten Sie, ich suche die eingebaute PHP Funktion, um dies zu tun, keine Homebrew-Funktion (das ist alles, was eine Google-Suche scheinbar zurückgibt). Es gibt einen, ich kann mich einfach nicht an seinen Namen erinnern oder ihn auf php.net finden. Der Name von IIRC ist nicht so intuitiv.

150
Robin Barnes

Sie suchen nach http_build_query()

281
tj111

Hier ist eine einfache php4-freundliche Implementierung:

/**
* Builds an http query string.
* @param array $query  // of key value pairs to be used in the query
* @return string       // http query string.
**/
function build_http_query( $query ){

    $query_array = array();

    foreach( $query as $key => $key_value ){

        $query_array[] = urlencode( $key ) . '=' . urlencode( $key_value );

    }

    return implode( '&', $query_array );

}
22
SuitedSloth

Nur als Ergänzung zur Antwort von @thatjuan.
Kompatibelere PHP4-Version davon: 

if (!function_exists('http_build_query')) {
    if (!defined('PHP_QUERY_RFC1738')) {
        define('PHP_QUERY_RFC1738', 1);
    }
    if (!defined('PHP_QUERY_RFC3986')) {
        define('PHP_QUERY_RFC3986', 2);
    }
    function http_build_query($query_data, $numeric_prefix = '', $arg_separator = '&', $enc_type = PHP_QUERY_RFC1738)
    {
        $data = array();
        foreach ($query_data as $key => $value) {
            if (is_numeric($key)) {
                $key = $numeric_prefix . $key;
            }
            if (is_scalar($value)) {
                $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($key) : rawurlencode($key);
                $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($value) : rawurlencode($value);
                $data[] = "$k=$v";
            } else {
                foreach ($value as $sub_k => $val) {
                    $k = "$key[$sub_k]";
                    $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($k) : rawurlencode($k);
                    $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($val) : rawurlencode($val);
                    $data[] = "$k=$v";
                }
            }
        }
        return implode($arg_separator, $data);
    }
}
3
vp_arth

Da diese Frage ziemlich alt ist und für PHP, gibt es eine Möglichkeit, dies im (derzeit) sehr beliebten PHP - Framework Laravel zu tun.

Um die Abfragezeichenfolge für einen Pfad in Ihrer Anwendung zu codieren, geben Sie Ihren routes Namen an und verwenden Sie dann die route()-Hilfsfunktion wie folgt:

route('documents.list.', ['foo' => 'bar']);

Das Ergebnis sieht ungefähr so ​​aus:

http://localhost/documents/list?foo=bar

Beachten Sie auch, dass, wenn Ihre Route über Pfadsegmentparameter verfügt, z. /documents/{id}, und stellen Sie sicher, dass Sie auch ein id-Argument an die route()-Parameter übergeben, andernfalls wird standardmäßig der Wert des ersten Parameters verwendet.

0
alexkb

Implode fasst ein Array zu einem String zusammen, aber um eine SQL-Abfrage aus einem Kay/Value-Paar zu erstellen, müssen Sie Ihre eigene Funktion schreiben.

0
Click Upvote

aber für inverse diese Arbeit können Sie verwenden:

void parse_str(str $input, array $output);
//for example:
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

Viel Glück.

0
Armpc