[英]PHP CSV File Stop on Blank Lines
我正在尝试将上传的CSV文件处理为PHP中的数组。 我的工作正常,但是最终来自用户的某些文件有一堆带有分隔符的空白行。 当他们在现有文件上使用Excel时,通常会发生这种情况。 突出显示旧单元格并清除它们。
样本CSV文件
lineNo,date,vendor,amount 1,5/2/2012,V000236,3727.21 2,5/2/2012,V003432,4826.19 ,,, ,,,
成为以下数组
Array ( [0] => Array ( [0] => lineNo [1] => date [2] => vendor [3] => amount ) [1] => Array ( [0] => 1 [1] => 5/2/2012 [2] => V000236 [3] => 3727.21 ) [2] => Array ( [0] => 2 [1] => 5/2/2012 [2] => V003432 [3] => 4826.19 ) [3] => Array ( [0] => [1] => [2] => [3] => ) [4] => Array ( [0] => [1] => [2] => [3] => ) )
我不想只删除任何空白行,我想在数组索引2之后停止。在我的函数上轻松一点我是新手:P
function csvToArray($csvFile, $specialChars = FALSE) {
$arrayCSV = array();
if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV
$csvKey = 0; // Set the parent array key to 0
while (($csvData = fgetcsv($csvHandle)) !== FALSE) {
$c = count($csvData); // Count the total keys in each row
//need something to stop on blank delimiter rows ,,,
for ($x = 0; $x < $c; $x++) { //Populate the array
if ($specialChars === TRUE) {
$arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]);
} else {
$arrayCSV[$csvKey][$x] = $csvData[$x];
}
}
$csvKey++;
}
fclose($csvHandle);
}
return $arrayCSV;
}
最终,我希望这回来
Array ( [0] => Array ( [0] => lineNo [1] => date [2] => vendor [3] => amount ) [1] => Array ( [0] => 1 [1] => 5/2/2012 [2] => V000236 [3] => 3727.21 ) [2] => Array ( [0] => 2 [1] => 5/2/2012 [2] => V003432 [3] => 4826.19 ) )
你不能break;
吗break;
一旦发现空值,您的while循环会如何?
if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV
$csvKey = 0; // Set the parent array key to 0
while (($csvData = fgetcsv($csvHandle)) !== FALSE) {
$c = count($csvData); // Count the total keys in each row
// ## Flag variable ##########
$empty = true;
for ($x = 0; $x < $c; $x++) { //Populate the array
// ## Test each value ##########
$empty = $empty && (empty($csvData[$x]));
if ($specialChars === TRUE) {
$arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]);
} else {
$arrayCSV[$csvKey][$x] = $csvData[$x];
}
}
// ## Stop loop if all empty ##########
if ($empty) {
unset($arrayCSV[$csvKey]);
break;
}
$csvKey++;
}
fclose($csvHandle);
}
注意:
CSV文件中的空白行将作为包含单个 null字段的数组返回,并且不会被视为错误。
if ($c == 1 && current($csvData) === null) {
break;
}
您可以运行一个额外的循环以检查是否为空
while(! feof($file)){
$current_data = fgetcsv($file);
for ($i=0; $i < $total_title ; $i++) {
if( empty( $current_data[ $i ] ) ){
unset($information[$itt]);
break;
}
$information[$itt][ $titles[$i] ] = $current_data[$i] ;
}
$itt = $itt+1;
}
我推荐这个php函数,正是您想要的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.