2016-07-29 16 views
0

Ich versuche, die URL-Variable ID aus einer Liste von Objekten in einem Array zu erhalten und sie anzuzeigen.Get URL Variable von Array


Current Code:

$display = print_r($array); 
echo $display; 

Output:

Array ([0] => https://example.com?ID=435 [1] => https://example.com?ID=53 [2] => https://example.com?ID=5 [3] => https://example.com?ID=25) 

Ich möchte das Display jede URL variable ID aus dem Array in einem <div> Element:

<div>435</div> 
<div>53</div> 
<div>5</div> 
<div>25</div> 

habe ich versucht, dies mit dem folgenden Code zu tun, aber kein Glück:

foreach($display as $display2) { 
    echo '<div>'.$_GET['ID'].'</div>'; 
} 
+0

Dies wird regex (reguläre Ausdrücke) beinhalten. Die '$ _GET'-Variable ruft die Anfrage der aktuellen Seite ab und ist keine Funktion zum Entfernen von Abfragedaten aus einer Zeichenfolge. –

Antwort

2

Der Super Global $_GET ist für den Zugriff auf Abfrage-String-Werte aus der aktuellen Anfrage, nicht für das Lesen sie aus einer beliebigen URL in einer Zeichenfolge gespeichert.

Aber ärgern Sie sich nicht, hat PHP-Standard-Bibliothek Funktionen zu helfen, nämlich parse_url() und parse_str()

foreach($display as $url) { 
    $queryString = parse_url($url, PHP_URL_QUERY); 
    parse_str($queryString, $parameters); 
    echo '<div>'.$parameters['ID'].'</div>'; 
} 
+0

Vielen Dank –

+0

Übrigens, ich dachte, ich sollte darauf hinweisen, dass Sie zwei fehlen '' ' –

+0

Doh - Fixed! Prost –

1

Was Sie suchen so etwas wie das ist wahrscheinlich. Sie müssen jede URL im Array durchlaufen und die ID daraus extrahieren. Dies kann durch Teilen der URL bei = und Ergreifen des zweiten Teils erfolgen.

foreach($display as $display2) { 
    $stringArray = explode("=", $display2); //Break apart string at "=" 
    $id = $stringArray[1]; //Grab second part of split string (the ID) 
    echo '<div>'.$id.'</div>'; 
} 
1

dass $ Array Unter der Annahme, hält alle URLS, wie in Ihrem Beispiel gezeigt:

foreach($array as $v){ 
    $str = explode('=', $v); 
    echo '<div>'.$str[1].'</div>'; 
} 
0

$_GET ein super global ist, dass alle Abfrageparameter für die Seite enthält, die angefordert wurde. Es kann nicht für eine Liste von URL-Strings verwendet werden.

Stattdessen können Sie eine Kombination aus substr() und strrpos() verwenden:

$urls = array(
    "https://example.com?ID=435", 
    "https://example.com?ID=53", 
    "https://example.com?ID=5", 
    "https://example.com?ID=25", 
); 

foreach($urls as $url) { 
    if(strrpos($url, "?") !== FALSE) { 
     echo "<div>" . substr($url, strrpos($url, "?") + 4) . "<br />"; 
    } 
} 

Fühlen Sie sich frei das obige Beispiel in phpfiddle.org zu kopieren und zu überprüfen, ob es wie erwartet funktioniert.

EDIT:

Added if Block um das Echo Urls, um herauszuzufiltern, die keinen ID Wert haben können.

+0

Ich bemerkte die '+ 4' in Ihrem Code. Sind das so viele Objekte im Array? Ich habe gerade ein Beispiel gepostet; Ich kann nicht vorhersehen, wie viele Objekte es geben wird (es variiert) –

+0

Nein, es ist die Anzahl der Zeichen nach dem Fragezeichen '?' Der Abfrage, an der die 'substr()' -Operation beginnen soll. d.h. Zählen des "?" Die Funktion "substr()" sollte 4 Zeichen "? = ID" vor dem Beginn der Operation "substr()" bewegen. Es ist ein Offset, da Sie den Namen des Abfragezeichenfolgenparameters kennen.Wenn das, was gepostet wurde, ein Beispiel ist, würde dies jedoch nicht funktionieren. Es ist eine rohe, aber effektive Art zu tun, was Sie wollen, wenn die URLs immer 1 Parameter namens ID haben. Zugegebenermaßen sind die anderen Antworten vielleicht besser geeignet, wenn die URLs nur Beispiele sind. – War10ck