通过PHP导入CSV中上一行的值
我正在通过PHP从CSV导入数据 在CSV的某些行上,列1有一个值,而在其他行上它没有值。第2列始终有一个值 如果第1列为空,第2列有一个值,我希望第1列使用第1列中的前一个值。比如说通过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
|-------|-------|
| 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循环中存储变量@中国不用担心,我们每个人都会经历一次。快乐编码