2017-03-06 6 views
0

Hier ist meine Frage ich einen String "[[10,20],[30,40],[50,30]]" haben, die durch einfache Verwendung json_decode in ein Array umgewandelt werden können, die für numerische Werte funktioniert gut, aber es ist für String-Werte wie "[S,M,L]" Fehler, die ichString in Array PHP konvertieren?

$string_value = str_replace(',', '","', $string_value); 
$string_value = str_replace('[', '["', $string_value); 
$string_value = str_replace(']', '"]', $string_value); 
$string_value = json_decode($string_value); 
mit einer einfachen Logik behandelt

dies funktioniert für eine dimentional Array wie die feine oben angegebenen, aber im Fall von 2D-Array wie [[red,green],[red],[red,blue]] es versagt, gibt es eine andere Art und Weise diesen

dank im Voraus ... tun

+0

Nun könnte man ersetzen '[ "[ 'mit' [[ 'und']"]' mit ']]' am Ende – Musa

+4

Warum bekommen Sie solche Strings, die nicht richtig codiert sind? Ich würde auf das andere Ende schauen und es reparieren. – AbraCadaver

+2

Wenn Sie versuchen, Ihren eigenen Parser für ein nicht standardisiertes Format zu schreiben, werden Sie immer auf Probleme, Ausnahmen usw. stoßen. Können Sie die Eingabe nicht reparieren? – jeroen

Antwort

3

Ein regex Ersatz funktionieren würde alle alphabetischen Zeichen in Anführungszeichen wickeln:

$value = preg_replace("(\w+)", '\'$0\'', $input); 

Wie so:

<?php 

$input1 = "[[10,20],[30,40],[50,30]]"; 
$input2 = "[[red,green],[red],[red,blue]]"; 

$value1 = preg_replace("(\w+)", '\'$0\'', $input1); 
$value2 = preg_replace("(\w+)", '\'$0\'', $input2); 

echo $value1; 
echo "<br />"; 
echo $value2; 

?> 

mir diese Ausgabe gibt:

[['10','20'],['30','40'],['50','30']] 
[['red','green'],['red'],['red','blue']] 
+1

Parse Fehler ..... – AbraCadaver

+0

@AbraCadaver behoben – Dai

+2

Gute Idee, wird eine Lösung liefern, aber das ist nicht _yet_ eine Antwort auf die Frage! – arkascha

0

die Zeichenfolge zu konvertieren a 1 Dimension Array fistt entfernen Sie die Klammern und dann nur eine Zeichenfolge getrennt durch Kommas verwenden Sie die explode Spaß ction:

$result=str_replace(array('[',']'),'',$original_string); 
$result=explode(',',$result); 

Dies kann helfen eingegeben sind nur 2D-Arrays:

$final_array=array(); 
// separate each brackets 
$separate_in_arrays=explode(',',$osiginal_string); 
foreach ($separate_in_array as $array) { 
    $result=str_replace(array('[',']'),'',$array[0]); 
    $result=explode(',',$result); 
// Save result in a nested array 
    $final_array[]=$result; 
} 
+1

Dies funktioniert nicht, weil es verschachtelte Arrays gibt, wird dieser Ansatz das Array abflachen. – Dai

+0

Sorry, nicht wirklich eine Antwort auf die Frage ... – arkascha

+0

Ja tatsächlich. Dies ist eine Lösung, um ein 1-dimensionales Array zu erstellen. –