2016-08-09 3 views
-1

Ich habe ein Array mit der folgenden Struktur kommen:Entfernen Teil der Zeichenfolge, bevor sie mit vorhandenen Werten vergleichen

$arr = [ 
    traveler_name_1 => 'value', 
    hotel_name_1 => 'value', 
    hotel_in_date_1 => 'value', 

    traveler_name_2 => 'value', 
    hotel_name_2 => 'value', 
    hotel_in_date_2 => 'value', 

    traveler_name_n => 'value', 
    hotel_name_n => 'value', 
    hotel_in_date_n => 'value', 
]; 

ich überprüfen mag, wenn die Zeichenfolge ohne den Index gültig ist und erlaubt ist. Zum Beispiel:

$allowed_values = [ 
    'traveler_name', 
    'hotel_name', 
    'hotel_in_date' 
]; 

Der einfache Weg über $arr als $key => $value Paare werden laufen würde und dann eine in_array() machen aber tun, dass ich zuerst den letzten Teil der Zeichenfolge, beispielsweise entfernen müssen:

traveler_name_1 => remove the _1 
hotel_name_1 => remove the _1 
hotel_in_date_1 => remove the _1 

So kann ich auf dem $allowed_values Array nach ihnen suchen.

Die Frage ist also, wie entferne ich diesen Teil aus der Zeichenfolge?

Die Werte nach der zweiten _ werden dynamisch generiert, so dass sie keine konstante Länge haben. Der Wert davor ist konstant.

Wenn Sie eine bessere Möglichkeit haben, diese dann zu validieren, gehen Sie vor und lassen Sie mich wissen

Antwort

0

Eine Möglichkeit (wahrscheinlich nicht die effizienteste) ist, dies zu tun:

$s = "traveler_name_24872"; 
$arr = explode("_", $s); 
array_pop($arr); 
$s2 = implode("_", $arr); // traveler_name 
0

je nachdem, wie Sie Möchten Sie die Daten manipulieren, würde dies das zurückgeben, wonach Sie suchen. Sie könnten dann den $ index und den $ Wert in ein neues Array setzen oder einfach die Daten innerhalb dieser foreach Schleife manipulieren.

Dies gibt die vollständige Zeichenfolge abzüglich der letzten zwei Zeichen (über die -2) zurück. Wenn Sie alle, aber die letzten 3 Zeichen zurückkehren wollen, dann würden Sie ersetzen -2 mit -3 usw.

foreach ($arr as $key => $value) { 
    $index = substr($key, 0, -2); 
} 
-1

Ich habe die Lösung nach einigen Versuchen gefunden, so ist es hier, was ich suchte:

foreach ($arr as $key => $value) { 
    if (!in_array(substr(key($key), 0, strrpos(key($key), '_')), $allowed_values, true)) { 
     echo 'Not allowed'; 
     break; 
    } 
} 

Danke trotzdem

Verwandte Themen