Php 将csv与数组进行比较
我试图将csv数据与我的阵列进行比较,因此csv ocuk大约有7000行,我只想显示csv中与$sku阵列匹配的数据,该阵列最终将有大约500个项目,稍后将转到数据库阵列,但目前我只希望它能正常工作Php 将csv与数组进行比较,php,arrays,csv,Php,Arrays,Csv,我试图将csv数据与我的阵列进行比较,因此csv ocuk大约有7000行,我只想显示csv中与$sku阵列匹配的数据,该阵列最终将有大约500个项目,稍后将转到数据库阵列,但目前我只希望它能正常工作 <?php $sku = array("WC-564-EK","WC-562-EK"); echo '<table>'; //start table $ocuk = fopen("ocuk.csv", "r"); while (($csv = fgetcsv($ocuk, 10
<?php
$sku = array("WC-564-EK","WC-562-EK");
echo '<table>'; //start table
$ocuk = fopen("ocuk.csv", "r");
while (($csv = fgetcsv($ocuk, 10000, ',')) !== FALSE)
{
foreach ($sku as $var)
{
for ($i=; $i<=10000; $ii)
{
if (strtolower ($var)==strtolower($csv[$i]))
{
echo '<tr><td>',$csv[0], //brand
'</td><td>',$csv[1], //stockcode
'</td><td>',$csv[2], //desc
'</td><td>',$csv[3], //quantiy
'</td><td>',$csv[4], //resellerprice
'</td><td>',$csv[5], //ean
'</td><td>',$csv[6], //mpn
'</td></tr>';
}
}
}
}
fclose($handle);
echo '</table>'; //end table
?>
我得到的只是空白输出,而不是while/foreach/for/if检查,请尝试
while (($csv = fgetcsv($ocuk)) !== FALSE)
{
if (false === empty(array_intersect($sku, array_map('trim', $csv)))) {
echo …
}
}
作为替代方案,考虑
class RowContainsValuesFilter extends FilterIterator
{
private $valuesToSearchFor;
public function __construct(Iterator $iterator, array $valuesToSearchFor)
{
$this->valuesToSearchFor = $valuesToSearchFor;
parent::__construct($iterator);
}
public function accept()
{
return !empty(
array_intersect(
$this->valuesToSearchFor,
array_map('trim', $this->current())
)
);
}
}
通过这种方式封装过滤逻辑,可以方便地在任何需要的地方重用逻辑,而无需将比较放在使用它的地方。这使得在后期更改逻辑变得更加容易。您只需执行以下操作:
$sku = array("WC-564-EK","WC-562-EK");
$file = new SplFileObject("ocuk.csv");
$file->setFlags(SplFileObject::READ_CSV);
$filteredFile = new RowContainsValuesFilter($file, $sku);
foreach ($filteredFile as $row) {
// this will only give rows for which the filter criteria apply
}
参考:
for($I=;$ifor($I=;$iwell修复$I++没有修复输出