由','和str_replace()分隔的数组元素;?

时间:2011-04-15 07:35:49

标签: php

我有一个由,分隔的源数据,但其元素中的某些情况包含,

$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

3 个答案:

答案 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;
}