2017-01-23 114 views
1

我从我不能改变外部资源刮以下一种字符串:PHP用逗号爆炸无视成千上万分隔符

["one item",0,0,2,0,1,"800.12"], 
["another item",1,3,2,5,1,"1,713.59"], 
(etc...) 

我用下面的代码爆炸元素到数组。

<?php 
$id = 0; 
foreach($lines AS $line) { 
    $id = 0; 

    // remove brackets and line end comma's 
    $found_data[] = str_replace(array('],', '[',']', '"'), array('','','',''), $line); 

    // add data to array 
    $results[$id] = explode(',', $line); 

} 

对于第一行可以正常工作,但由于第二行对最后一项的千位分隔符使用逗号,所以它在那里失败。所以,不知何故,我需要禁用爆炸之间替换的东西“字。

如果所有值将被包围”的人物,我可以只使用类似

explode('","', $line); 

然而,不幸的是,这不是这里的情况:有些值被“包围”,有些不是(不总是相同的值),所以我有点迷失在我应该如何继续下去的任何人谁可以指引我在正确的方向吗

+1

“的第二行使用的成千上万逗号” ,我看到一个点分隔符... –

+0

是数据可能格式化为JSON?看起来这样对我的基础上你的例子 –

+0

@ka_lin你是什么意思?查看最后的值,1,713.59。千位分隔符是逗号,小数点分隔符。 :) – dirk

回答

4

你可以请使用json_decode,因为您的输入字符串似乎是有效的json字符串。

$str = '["another item",1,3,2,5,1,"1,713.59"]' 
$arr = json_decode($str); 

然后可以从得到的数组访问单个索引或使用打印整个数组:

print_r($arr); 

输出:

Array 
(
    [0] => another item 
    [1] => 1 
    [2] => 3 
    [3] => 2 
    [4] => 5 
    [5] => 1 
    [6] => 1,713.59 
) 
+1

赞赏,这工作。谢谢 :) – dirk