Странное поведение при разборе CSV - PullRequest
0 голосов
/ 12 июня 2011

Я столкнулся с проблемой при разборе CSV (с 2 столбцами) Array ([0] => Array ([0] => oldcustomer 1 => newcostumer 4245945 [2] =>6773197 4260367 [3] => 6773381 4889300 [4] => 6764472 4740434 [5] => 6764555 4710449 [6] => 6764560

Я хочу, чтобы он был в отдельных массивах и newcostumerID смешивался сID старого клиента "

CSV-файл:

oldcustomer; newcostumer4245945; 67731974260367; 67733814889300; 67644724740434; 67645554710449; 67645604699714; 67665314451642; 67756824534699; 67756834378586; 67756844711005; 67756854502714; 67756864288738; 6775687

CSV Parse (украдено у здесь )

function csvstring_to_array($string, $separatorChar = ',', $enclosureChar = '"', $newlineChar = "\n") {
// @author: Klemen Nagode
$array = array();
$size = strlen($string);
$columnIndex = 0;
$rowIndex = 0;
$fieldValue="";
$isEnclosured = false;
for($i=0; $i<$size;$i++) {

    $char = $string{$i};
    $addChar = "";

    if($isEnclosured) {
        if($char==$enclosureChar) {

            if($i+1<$size && $string{$i+1}==$enclosureChar){
                // escaped char
                $addChar=$char;
                $i++; // dont check next char
            }else{
                $isEnclosured = false;
            }
        }else {
            $addChar=$char;
        }
    }else {
        if($char==$enclosureChar) {
            $isEnclosured = true;
        }else {

            if($char==$separatorChar) {

                $array[$rowIndex][$columnIndex] = $fieldValue;
                $fieldValue="";

                $columnIndex++;
            }elseif($char==$newlineChar) {
                echo $char;
                $array[$rowIndex][$columnIndex] = $fieldValue;
                $fieldValue="";
                $columnIndex=0;
                $rowIndex++;
            }else {
                $addChar=$char;
            }
        }
    }
    if($addChar!=""){
        $fieldValue.=$addChar;

    }
}

if($fieldValue) { // save last field
    $array[$rowIndex][$columnIndex] = $fieldValue;
}
return $array;

}

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Посмотрите на функцию разнесения. Возьмите вашу строку и запустите explode ("\ n", $ string), чтобы получить массив строк. Затем переберите каждую строку и взорвитесь на; характер.

$rows = explode("\n",$string);
$oldcustomer = array();
$newcustomer = array();
foreach ($rows as $row) {
  $columns = explode(";",$row);
  $oldcustomer[] = $columns[0];
  $newcustomer[] = $columns[1];
}
print_r($oldcustomer);
print_r($newcustomer);
0 голосов
/ 12 июня 2011

Вы можете использовать следующий код для решения вашей проблемы

$row = -1;
$oldcustomer=array();
$newcustomer=array();
if (($handle = fopen("yourfile.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        if($row==-1){//Skipping first line
            $row++;
            continue;
        }
        $oldcustomer[$row]=$data[0];
        $newcustomer[$row]=$data[1];
        $row++;
    }
    fclose($handle);
    print_r($oldcustomer);
    print_r($newcustomer);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...