80 Stimmen

Generiere eine URL mit Parametern aus einem Array

Ich muss ein Array wie das unten stehende nehmen:

$subids = Array
    (
        [s1] => one
        [s2] => two
        [s3] => three
        [s4] => four
        [s5] => five
        [s6] => six
    )

und eine URL generieren wie http://example.com?s1=one&s2=two&s3=three=&s4=four&s5=five&s6=six

Nicht alle Subids sind immer definiert, sodass manchmal s3 nicht definiert sein kann und somit nicht an die URL angehängt werden sollte. Außerdem muss das erste Subid, egal welches es ist, das ? vorangehen haben anstatt des kaufmännischen Und-Zeichens (&)

Also, wenn das Array nur folgendes ist:

$subids = Array
    (
        [s2] => two
        [s6] => six
    )

dann muss die URL http://example.com?s2=two&s6=six sein

Bisher habe ich folgendes:

$url = 'http://example.com'

    foreach ($subids AS $key => $value) {
        $result[$id]['url'] .= '&' . $key . '=' . $value;
    }

Ich bin jedoch nicht sicher, wie ich am besten das ? am Anfang des ersten Schlüssel/Wert-Paars anhängen kann.

Ich habe das Gefühl, dass es eine PHP-Funktion geben müsste, die dabei hilft, aber ich finde nicht viel. Ich benutze Codeigniter, ob es dort etwas gibt, das von CI bereitgestellt wird.

188voto

Baba Punkte 91769

Alles was du brauchst ist http_build_query:

$final = $url . "?" . http_build_query($subids);

18voto

Yakir Sitbon Punkte 462

Sie können die Funktion http_build_query() verwenden. Beispiel von php.net:

 'bar',
    'baz' => 'boom',
    'cow' => 'milk',
    'php' => 'hypertext processor',
);

echo http_build_query( $data ) . "\n";
echo http_build_query( $data, '', '&' );
?>

Und geben Sie diese Zeilen aus:

foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&baz=boom&cow=milk&php=hypertext+processor

Sie können die Quelle lesen: http://www.php.net/manual/de/function.http-build-query.php

Übrigens, wenn Sie WordPress verwenden, können Sie diese Funktion nutzen: http://codex.wordpress.org/Function_Reference/add_query_arg

Viel Spaß. :)

1voto

Murilo Punkte 550

Sie können die http_build_query() Funktion verwenden, aber stellen Sie sicher, dass Sie einige Validierungen durchführen, wenn die URL beispielsweise aus einer externen Funktion stammt.

$url = irgendwoDieUrlBekommen();
$params = ['param' => 'wert', 'param2' => 'wert2'];
$queryParams = http_build_query($params);
if (strpos($url, '?') !== FALSE) {
    $url .= '&'. $queryParams;
} else {
    $url .= '?'. $queryParams;
}

Wenn Sie die PECL-Erweiterung haben, können Sie http_build_url() verwenden, die bereits berücksichtigt, ob Sie weitere Parameter zu einer bereits bestehenden URL hinzufügen oder nicht, unter anderem Validierungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X