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

通过PHP导入CSV中上一行的值,php,csv,import,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 B

我正在通过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){
如果($i>0){
如果($data[0]=''&&$data[1]!=''){
echo prev($data[0])。$data[1]'
; }否则{ echo$data[0]。$data[1]'
; } } $i++; }

我的头撞在墙上好几个小时了,所以我想要一个指针

只要第一行不是空的,这应该可以工作

$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++;
}
$x=null;
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
如果($i>0){
$x=$data[0]=''?$x:$data[0];
//这类似于:如果$data[0]为空,则使用$x,否则说$x是$data[0]。
//这样,您就可以跟踪上一个值。
//如果有一个用新值覆盖,则保留旧值
echo$x.$data[1]'
; } $i++; }
只要第一行不是空的,这应该可以工作

$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++;
}
$x=null;
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
如果($i>0){
$x=$data[0]=''?$x:$data[0];
//这类似于:如果$data[0]为空,则使用$x,否则说$x是$data[0]。
//这样,您就可以跟踪上一个值。
//如果有一个用新值覆盖,则保留旧值
echo$x.$data[1]'
; } $i++; }
您可以将以前的值存储在变量中并使用该值

$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++;
}
$previousColumn1='';
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
如果($i>0){
如果($data[0]=''&&$data[1]!=''){
echo$previousColumn1.$data[1]'
; }否则{ $previousColumn1=$data[0]; echo$data[0]。$data[1]'
; } } $i++; }
您可以将以前的值存储在变量中并使用该值

$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++;
}
$previousColumn1='';
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
如果($i>0){
如果($data[0]=''&&$data[1]!=''){
echo$previousColumn1.$data[1]'
; }否则{ $previousColumn1=$data[0]; echo$data[0]。$data[1]'
; } } $i++; }
如前所述,只要存储以前的值并在任何时候给出新值时覆盖它就可以了。它将假定如果第一行为空,则将使用您在循环外部提供的
$prev

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

这使用了?:表示如果有
$data[0]
的值,则使用它,否则使用
$prev

如前所述,只需存储以前的值并在任何时候给出新值时覆盖它即可。它将假定如果第一行为空,则将使用您在循环外部提供的
$prev

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

这使用了简短的?:表示如果有
$data[0]
的值,则使用它,否则使用
$prev

只需将第一列的值隐藏起来,如果在一行中发现为空,则使用它。只需将第一列的值隐藏起来,如果在一行中发现为空,则使用它。谢谢Nigel,你的回答同样有效。谢谢奈杰尔,你的回答同样有效。谢谢卡兰巴。我以前试过,但一直在while循环中存储变量@中国不用担心,我们每个人都会经历一次。祝你快乐,汉克斯·卡兰巴。我以前试过,但一直在while循环中存储变量@中国不用担心,我们每个人都会经历一次。快乐编码