2017-03-06 4 views
0

は、私は単に数値のため正常に動作しますが、それは私が単純な論理に文字列をPHPに変換しますか?ここ

$string_value = str_replace(',', '","', $string_value); 
$string_value = str_replace('[', '["', $string_value); 
$string_value = str_replace(']', '"]', $string_value); 
$string_value = json_decode($string_value); 

を使用して処理"[S,M,L]"のような文字列値のために、故障していますjson_decodeを使用して配列に変換できる文字列"[[10,20],[30,40],[50,30]]"を持っている私の質問 ですこれは、それが失敗しています[[red,green],[red],[red,blue]]同様2Dアレイの場合には、事前にこの

感謝をしている別の方法は...

あり、上記が、与えられたような1次元配列のため正常に動作します
+0

'[]'で "['と '[['と ']"] ']'さてあなたは置き換えることができます:これは助けることができる

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

は2Dのみの配列が入力されています最後に – Musa

+4

なぜコード化されていない文字列が正しくエンコードされていますか?私は反対側を見て、それを修正するだろう。 – AbraCadaver

+2

標準化されていない形式の独自のパーサーを作成しようとすると、常に問題や例外などが発生します。入力を修正する方法はありませんか? – jeroen

答えて

3

正規表現置換が引用符ですべてのアルファベット文字をラップするために働くだろう:

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

ので、同じように:

<?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; 

?> 

は私にこの出力を与える:

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

解析エラー..... – AbraCadaver

+0

@AbraCadaver fixed – Dai

+2

良いアイデアが解決策を提供しますが、これは質問に対する回答ではありません! – arkascha

0

に文字列を変換するには1 Dimension Array fisrtは角括弧を削除し、カンマで区切られた文字列のみを使用して、explodeの楽しみを使用しますction:

$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

ネストされた配列があるため、これは機能しません。この方法は配列を平坦化します。 – Dai

+0

申し訳ありませんが、本当に質問への答え... – arkascha

+0

はい、本当にありがとうございます。これは、1次元配列を作成するためのソリューションです。 –

関連する問題