我正在通过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++;
}
我的头撞在墙上好几个小时了,所以我喜欢指针!
答案 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
。