Php csv文件中的空行

Php csv文件中的空行,php,mysql,cakephp,csv,Php,Mysql,Cakephp,Csv,我需要一些帮助,我将表格导出到csv文件,这给我添加了8个空行。为什么?也许任何人都能帮我一点忙 export.ctp文件 <?php foreach ($data as $row): foreach ($row['Kontaktid'] as &$cell): // Escape double quotation marks $cell = '"' . preg_replace('/"/','""',$cell) . '"'; en

我需要一些帮助,我将表格导出到csv文件,这给我添加了8个空行。为什么?也许任何人都能帮我一点忙

export.ctp文件

<?php
foreach ($data as $row):
    foreach ($row['Kontaktid'] as &$cell):
        // Escape double quotation marks
        $cell = '"' . preg_replace('/"/','""',$cell) . '"';
    endforeach;
    echo implode(',', $row['Kontaktid']) . "\n";
endforeach;
?>
这就是这样做的

但是我不想要这些空行,当我将这个文件导入mysql时,它也添加了这些空行

谢谢你的帮助

如果我输入var dump,那么我得到这个。 添加以下内容:

if (isset($row['Kontaktid']) && strlen($row['Kontaktid']) && !empty($row['Kontaktid']))
之前:

echo implode(',', $row['Kontaktid']) . "\n";
添加以下内容:

if (isset($row['Kontaktid']) && strlen($row['Kontaktid']) && !empty($row['Kontaktid']))
之前:

echo implode(',', $row['Kontaktid']) . "\n";
使用您的代码:

<?php
foreach ($data as $row):
    $isRowEmpty = false;
    foreach ($row['Kontaktid'] as &$cell):
        // we assume the row is empty if the first cell is empty
        if(empty($cell)) {
            $isRowEmpty = true;
            break;
        } else {
            // Escape double quotation marks
            $cell = '"' . preg_replace('/"/','""',$cell) . '"';
        }
    endforeach;
    if(!$isRowEmpty) {
        echo implode(',', $row['Kontaktid']) . "\n";
    }
endforeach;
?>
希望这有帮助

使用您的代码:

<?php
foreach ($data as $row):
    $isRowEmpty = false;
    foreach ($row['Kontaktid'] as &$cell):
        // we assume the row is empty if the first cell is empty
        if(empty($cell)) {
            $isRowEmpty = true;
            break;
        } else {
            // Escape double quotation marks
            $cell = '"' . preg_replace('/"/','""',$cell) . '"';
        }
    endforeach;
    if(!$isRowEmpty) {
        echo implode(',', $row['Kontaktid']) . "\n";
    }
endforeach;
?>

希望这有帮助

检查一下,您的行不是空的:

<?php
foreach ($data as $row):
    if (!isset($row['Kontaktid']) || !$row['Kontaktid']) continue; // <-add this line
    foreach ($row['Kontaktid'] as &$cell):
        // Escape double quotation marks
        $cell = '"' . preg_replace('/"/','""',$cell) . '"';
    endforeach;
    echo implode(',', $row['Kontaktid']) . "\n";
endforeach;

可能问题不在此代码中。 检查两次,确保没有任何换行符在任何地方回响。 可能类似于:

   <?php
     //php code
    ?>
    ↓
    ↓
    ↓
块外的所有内容都相当于echo。。。; 因此,这些换行符像echo\n\n\n一样打印


好的做法是删除最后一行?>根本不删除

只需检查,您的行不是空的:

<?php
foreach ($data as $row):
    if (!isset($row['Kontaktid']) || !$row['Kontaktid']) continue; // <-add this line
    foreach ($row['Kontaktid'] as &$cell):
        // Escape double quotation marks
        $cell = '"' . preg_replace('/"/','""',$cell) . '"';
    endforeach;
    echo implode(',', $row['Kontaktid']) . "\n";
endforeach;

可能问题不在此代码中。 检查两次,确保没有任何换行符在任何地方回响。 可能类似于:

   <?php
     //php code
    ?>
    ↓
    ↓
    ↓
块外的所有内容都相当于echo。。。; 因此,这些换行符像echo\n\n\n一样打印

最佳做法是删除最后一个?>请尝试以下操作:

$fh = fopen('./file1.csv', 'wt');
foreach ($data as $row) {
    if (! empty($row['Kontaktid'])) {
        fputcsv($fh, $row['Kontaktid']);
    }
}
fclose($fh);
将“/file1.csv”替换为您的文件名和路径。如果需要在屏幕上转储CSV内容,则将第一行替换为$fh=STDOUT

试试这个:

$fh = fopen('./file1.csv', 'wt');
foreach ($data as $row) {
    if (! empty($row['Kontaktid'])) {
        fputcsv($fh, $row['Kontaktid']);
    }
}
fclose($fh);


将“/file1.csv”替换为您的文件名和路径。如果需要在屏幕上转储CSV内容,则将第一行替换为$fh=STDOUT

如果$row['Kontaktid']继续,您是否尝试过;?你为什么要花我们的时间?为什么你不能把你的$data数组变为var_转储,而我们都必须根据我们的假设来回答呢?请阅读我的回答下面关于linefeed的评论,我建议你的问题与提供的代码无关。在?>@frantsium之后寻找多余的换行符,好的,我更新我的答案。只删除最后一个?>要知道,您永远不会重复此操作。您是否尝试过只要$row['Kontaktid']继续;?你为什么要花我们的时间?为什么你不能把你的$data数组变为var_转储,而我们都必须根据我们的假设来回答呢?请阅读我的回答下面关于linefeed的评论,我建议你的问题与提供的代码无关。在?>@frantsium之后寻找多余的换行符,好的,我更新我的答案。只删除最后一个?>要知道,您永远不会重复此操作。警告2:strlen希望参数1为字符串,数组给定[APP\View\Kontaktid\export.ctp,第7行]警告2:strlen希望参数1为字符串,数组给定[APP\View\Kontaktid\export.ctp,第7行]警告2:strlen希望参数1为字符串,数组给定[APP\View\Kontaktid\export.ctp,第7行]警告2:strlen希望参数1是字符串,数组给定[APP\View\Kontaktid\export.ctp,第7行]这并没有改变任何事情你能在foreach中生成print\r$行吗?@vp\u arth你是什么意思?@frantsium我还在等print\r$行。我们需要合作来解决你的问题!@vp\u arth这就是为什么我需要检查$行,因为Kontaktid在我看来不像一个数组,更像是一个单元格。我想检查它有什么问题他$data和$row这没有改变任何东西你能在foreach中生成print\r$row吗?@vp\u arth你是什么意思?@frantsium我还在等print\r$row。我们需要合作来解决你的问题!@vp\u arth这就是为什么我需要检查$row,因为Kontaktid听起来不像数组,更像一个单元格。我想检查什么$data和$ROW有误,但这并没有改变anything@frantsiumKontacId应该是Kontaktid-您不应该进行清晰的复制粘贴…可能是因为问题不在此代码中。请检查两次,确保您没有任何换行符在任何地方回响。可能类似于?>\n\n\n\n\n\n这没有更改anything@frantsiumKontactid应该是Kontaktid-y您不应该进行清晰的复制粘贴…可能问题不在此代码中。请检查两次,确保您没有任何换行符在任何地方回响。可能类似于?>\n\n\n\n\n\n\n这会给我一个空白页,如果我使用$fh=STDIN,则会出现错误try fopen'php://stdin这是一个最好的解决方案,不要检查你的页面,而是检查你写的csv文件瑟福朋'php://stdin“,”wt“;然后我得到一个空白页面use$fh=fopen”php://output“,”wt“;。它似乎是标准的和”php://stdout'是可用的,但从中学习这一点并不容易。:-这给了我一个空白页,如果我使用$fh=STDIN;那么我得到了errortry fopen'php://stdin“,”wt“;这是一个最好的解决方案,检查的不是你的页面,而是csv文件你写了,如果你用fopen'php://stdin“,”wt“;然后我得到一个空白页面use$fh=fopen”php://output“,”wt“;。它似乎是标准的和”php://stdout'是可用的,但要从中了解这一点并不容易。:-