Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将csv与数组进行比较_Php_Arrays_Csv - Fatal编程技术网

Php 将csv与数组进行比较

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

我试图将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, 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
}
参考:


您是否尝试过var\u dump以确保csv正确转换为数组?如果我是你,我会包括trim(strtolower($csv[$I])。这应该做什么:
for($I=;$ifor($I=;$iwell修复$I++没有修复输出