2017-03-06 186 views
0

這裏是我的問題 我有一個字符串"[[10,20],[30,40],[50,30]]"可以通過簡單地使用json_decode這對於數值正常工作,但它的失敗字符串值像"[S,M,L]",我用一個簡單的邏輯將字符串轉換爲數組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); 

處理轉換成數組這工作得很好像上述但考慮到一個一個維數組中二維數組的情況下,像[[red,green],[red],[red,blue]]它的失敗,有沒有提前做這個

感謝的另一種方式......

+0

那麼你可以取代'[ 「['和'['和']」]'和']'在最後 – 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固定 – Dai

+2

好主意,將提供一個解決方案,但這不是_yet_答案的問題! – arkascha

0

將字符串轉換爲1維數組fisrt刪除括號,然後只有用逗號分隔的字符串使用explode fun ction:

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

這可以幫助輸入只有二維數組:

$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維數組的一種解決方案。 –