通过PHP导入CSV的上一行的值

时间:2018-05-01 12:24:03

标签: php csv import

我正在通过PHP从CSV导入数据。

在CSV的某些行中,第1列有一个值,而在其他行上它没有值。第2列始终具有值。

如果第1列为空且第2列有值,我希望第1列使用第1列中的先前值。例如

|-------|-------|
| Col 1 | Col 2 |
|-------|-------|
|   A   |   2   |
|   B   |   5   |
|   C   |   3   |
|       |   1   |
|   D   |   7   |

会返回

 A2 
 B5
 C3
 C1
 D7

我可以在数组上使用prev(),但由于$ data [0]是一个字符串,我不能使用prev()

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($i > 0) {  
            if ($data[0]=='' && $data[1]!=='') { 
            echo prev($data[0]).$data[1]'<br/>';
            } else { 
            echo $data[0].$data[1]'<br/>';
            }
        }
    $i++;
}

我的头撞在墙上好几个小时了,所以我喜欢指针!

3 个答案:

答案 0 :(得分:1)

只要第一行不为空,这就应该有效......

$x = null;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($i > 0) {
            $x = $data[0] == '' ? $x : $data[0];
            // this is like: if $data[0] is empty then use $x else say $x is $data[0].
            // Like that you can keep track of the previous value.
            // If there is one overwrite with the new one else keep the old value
            echo $x.$data[1]'<br/>';
        }
    $i++;
}

答案 1 :(得分:1)

您可以将先前的值存储在变量中并使用

$previousColumn1 = '';
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($i > 0) {  
            if ($data[0]=='' && $data[1]!=='') { 
            echo $previousColumn1.$data[1]'<br/>';
            } else { 
            $previousColumn1 = $data[0];
            echo $data[0].$data[1]'<br/>';
            }
        }
    $i++;
}

答案 2 :(得分:0)

正如已经提到的那样,只要存储前一个值并在给出新值时重写它就可以完成这项工作。它将假设如果第一行为空,则将使用您在循环外提供的$prev值...

$prev = '';
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $prev = $data[0]?:$prev;
    echo $prev.$data[1].PHP_EOL;
}

这使用?:的简短形式来说明$data[0]是否有值 - 然后使用它,否则使用$prev