2017-02-22 3 views
0

Erstellen ich den Wert eines vorhandenen Arrays habe, die wie folgt aussieht:eine Reihe von Text in Klammern durch Komma getrennten Wert

Product One (Amount: 199.99 USD, Select Option: Option One, Product One (CRM): 1) 

Was ich versuche, aus diesem zu erhalten ist ein Array, das wie folgt aussieht :

Product One 
    Amount: 199.99 USD 
    Select Option: Option One 
    Product One (CRM): 1 

Was ich versucht habe, ist:

$product_arr = json_decode($product_details[0]); 
$prod_arr_add = preg_split('/[\,(]+/', $product_arr[0]); 
print_r ($prod_arr_add); 

das wie folgt aussieht:

Array 
(
    [0] => Product One 
    [1] => Amount: 199.99 USD 
    [2] => Select Option: Option One 
    [3] => Product One 
    [4] => CRM): 1) 
) 

und andere Versuche mit Abweichungen von dem, was ich versucht habe, haben es versäumt, in ähnlicher Weise die gewünschten Ergebnisse zu produzieren.

Wie kann ich die Textzeichenfolge in ein Array aufteilen?

+0

** Benutzer gelöscht Kommentar oben. Vorgeschlagen verwende ich explode() - Ok, versuchte das. Dies ist, was ich bekommen: 'Array ( [0] => Produkt One (Betrag: 199,99 USD [1] => Wählen Sie eine Option: Option One [2] => Produkt One (CRM): 1) ) ' Wie kann ich die zwei falschen Klammern entfernen? – jarmerson

+0

Wenn das Muster für alle Produkte gilt, können Sie versuchen, einen regulären Ausdruck wie [dieser] (https://regex101.com/r/aRmO1k/1) zu verwenden. – sevavietl

Antwort

0

Mit nur einem Sample-String zu testen, habe ich so einige Annahmen machen und Regex Muster Effizienz opfern. Wenn diese Lösung verschärft werden muss, kommentieren Sie bitte und/oder bearbeiten Sie Ihre Frage.

$regex="/^(.+?)\s\((.*?),\s(.*?),\s(.*)\)$/"; 
$string="Product One (Amount: 199.99 USD, Select Option: Option One, Product One (CRM): 1)"; 

if(preg_match($regex,$string,$matches)){ 
    $prod_arr_add=array_slice($matches,1); // remove first element from the array (fullmatch) 
    echo "<pre>"; 
     var_export($prod_arr_add); 
    echo "</pre>"; 
}else{ 
    echo "no match"; 
} 

Ausgang:

array (
    0 => 'Product One', 
    1 => 'Amount: 199.99 USD', 
    2 => 'Select Option: Option One', 
    3 => 'Product One (CRM): 1' 
) 

Regex:

^(.+?)\s\( #Capture everything from the start to a space followed by a opening parenthesis 
(.*?),\s #Capture everything before a comma followed by a space 
(.*?),\s #Capture everything before a comma followed by a space 
(.*)\)$  #Capture everything before a closing parenthesis at the end of the string 
+0

Stört es dich, den dort verwendeten Regex zu erklären? – jarmerson

+0

@jarmerson Antwort bearbeitet. Wenn dies Ihre Frage befriedigt hat, geben Sie mir bitte das grüne Häkchen, wenn nicht, lassen Sie mich wissen, was sonst noch das Problem ist. – mickmackusa

+0

Ehrfürchtig. Ich arbeite gerade an einem separaten Projekt, aber das soll in der kommenden Woche fortgesetzt werden und ich werde es absolut versuchen und zu dir zurückkommen. – jarmerson

Verwandte Themen