in PHP

2017-08-29 3 views
1

Ich habe den Code unten ment einen Array in eine URL zu drehen, die diese Form hat: $nopageurl = '/no/page/url?&value1=value2=&value3=&value4=';in PHP

foreach($_GET as $key => $value) { 
    if(!in_array($key, array('page', 'a', 'sa', 'htaccess_key'))) { 
     $nopageurl .= "{$key}={$value}&"; 
    } 
} 

Aber der $ _GET Array hat die Form:

Array 
(
[value1] => 0 
[value2] => Array 
    (
     [0] => 3113 
     [1] => 3114 
    ) 

[value3] =>2 
[value4] =>status 
); 

Und das verursacht den Fehler E_NOTICE: Array to string conversion. Was soll ich tun, um diesen Fehler zu vermeiden?

+2

Filter die unerwünschten Elemente aus Ihrem Array zuerst (anstatt mit 'in_array') und dann mit [http_build_query] (http://php.net/manual/en/function.http-build-query.php) – iainn

+0

was willst du genau als Ausgabe für value2? –

+0

Ich habe 'http_build_query' verwendet, aber: Ich brauche alle Elemente im Array _und_ Ich brauche den letzten Parameter der URL daraus. –

Antwort

2

Als Entwickler müssen Sie alle Möglichkeiten hinsichtlich des EINGANGS des Benutzers ansprechen. Sie können die Eingabe beschränken, müssen sie dann jedoch validieren (keine Sub-Arrays für Beispiele zulassen), oder Sie müssen sie adressieren und eine Lösung für diese speziellen Fälle finden.

Sie müssen die Option berücksichtigen, dass der a-Parameter auch ein Array sein kann. Fügen Sie einfach eine Bedingung hinzu, um zu prüfen, ob der Parameter ein Array ist, und wenn ja, gehen Sie so vor, wie Sie möchten. Zum Beispiel:

foreach($_GET as $key => $value) { 
    if(!in_array($key, array('page', 'a', 'sa', 'htaccess_key'))) { 
     if(is_array($key)){ 
      foreach($key as $k => $v){ 
      $nopageurl .= "{$key}[$k]={$v}&"; 
      } 
     } else { 
      $nopageurl .= "{$key}={$value}&"; 
     } 
    } 
} 
+0

Dieser Teil gibt immer noch den 'Array to string conversion' Fehler: 'else { $ nopageurl. =" {$ Key} = {$ value} & "; } ' –

+0

Haben Sie es geschafft, es zu lösen oder funktioniert es immer noch nicht? –

+0

Ich habe die folgende Syntax verwendet (meine Antwort). Danke für die wertvolle Hilfe? –

0

Hier ist eine weitere gültige Möglichkeit, es zu tun:

foreach($_GET as $key => $value) { 
    if(!in_array($key, array('page', 'a', 'sa', 'htaccess_key'))) { 
     if(is_array($value)){ 
      foreach($value as $k => $v){ 
       $nopageurl .= "{$key}[$k]={$v}&"; 
      } 
     } else { 
      $nopageurl .= "{$key}={$value}&"; 
     } 
    } 
}