2017-03-06 184 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维数组的一种解决方案。 –