我有一个由,
分隔的源数据,但其元素中的某些情况包含,
$A = Array
(
[0] => Array
(
[0] => ",123, abc , company , Inc., 3043, 200, USD",// [123], [abc] , [company , Inc.], [3043], [200], [USD]
[1] => ",456, def , company,Inc., 3043, 200, USD"
)
)
无法更改数据源。(公司,公司,始终为fixed array orders
)
foreach ($A as $key=>$value){
foreach($value as $k=>$v){
$line = str_replace(',', ';', $v);
$row = explode(',', $line);
list($a, $b, $c, $d, $e, $f) = $row;
}
}
编辑:
RULE:
是的,company , Inc
的顺序始终固定,,
的数量始终为6
答案 0 :(得分:2)
$array = explode(',', trim($string, ','));
while (count($array) > 6) {
$array[3] = $array[3] . ',' . $array[4];
unset($array[4]);
$array = array_merge($array);
}
简短描述:我们将第3和第4个元素合并在一起,只要有超过6个元素。
另一个更直接的解决方案:
$array = explode(',', trim($string, ','));
$result = array_slice($array, 0, 2);
$result[] = implode(',', array_slice($array, 2, - 3));
$result = array_merge($result, array_slice($array, -3));
答案 1 :(得分:1)
更改源数据以包含值周围的引号,例如将其更改为
[0] => '"123", "abc" , "company , Inc.", "3043", "200", "USD"'
然后使用str_getcsv
。
答案 2 :(得分:1)
让你成为一个简单的功能。我创建$ foo,$ bar,$ baz的唯一原因是你可以轻松使用foreach并保留订单。
function parse($str){
$parts=explode(',',$str,4);
$result=array($parts[1],$parts[2]);
$parts=explode(',',$parts[3]);
$foo=array_pop($parts);
$bar=array_pop($parts);
$baz=array_pop($parts);
$result[2]=implode(',',$parts);
$result[3]=$baz;
$result[4]=$bar;
$result[5]=$foo;
return $result;
}