【问题标题】:Filtering CSV file like SQL in PHP在 PHP 中过滤 CSV 文件,如 SQL
【发布时间】:2020-03-31 23:58:01
【问题描述】:

我有一个包含多个列的 CSV 文件,我想像使用 SQL 一样进行排序和过滤。

CSV 结构 -

Type  |  Vin  | DateInStock
New   |  675F |   12/06/19
Used  |  7643 |   12/05/19

etc..

这是我的 PHP 文件 -

$fh = fopen('myFile.csv', 'r');
while($line = fgetcsv($fh)) {
    $type[] = array($line[0]); 
    $vin[] = array($line[1]); 
    $date[] = array($line[2]); 
}

所以我通常会做的是

"SELECT * FROM table WHERE type = 'Used' AND date = '$todays_date'";

然后回显所有的 Vin 号码

$vin = $row['vin'];

我可以获得类型、vin 和 date 的数组,但不确定如何仅显示来自今天日期且类型为 Used 的 vin。我会怎么做才能做到这一点?我试过这个只是为了获取类型为 Used 的 vin 号码 -

  foreach($type as $t){
      $recall_type = $t[0];
      if($recall_type == 'Used'){
          foreach ( $vin as $value ){
              $recall_vin = $value[0];    
              $recall_vin.'<br>';
          } 
      } 
   }

但这只会重复数百次相同的 vin 模式..

【问题讨论】:

    标签: php csv sorting filter foreach


    【解决方案1】:

    我会将所有值读入一个多维数组;然后您可以根据您拥有的条件使用array_filter 进行过滤。例如:

    $fh       = fopen('myFile.csv', 'r');
    $vehicles = array();
    while($line = fgetcsv($fh)) {
        $vehicles[] = array(
                            'type' => $line[0], 
                            'vin'  => $line[1], 
                            'date' => $line[2]
                            );
    }
    // get today's date in a format to match the CSV
    $today = date('m/d/y');
    $vehicles = array_filter($vehicles, function ($v) use ($today) { 
        return $v['type'] == 'Used' && $v['date'] == $today;
    });
    

    Demo on 3v4l.org

    【讨论】:

    • 谢谢,$v 是在哪里声明的?我有点困惑..我不熟悉多维数组
    • @RyanD $v 是一个虚拟变量,它表示数组的当前值,array_filter 遍历它。
    • 好吧,它返回一个空白页,当我打印出 $vehicles 时,多维数组是正确的并且具有正确的值。我需要对返回值做些什么吗?对不起,我是个菜鸟..
    • @RyanD 查看我的编辑,我添加了演示链接;如您所见,$vehicles 在调用array_filter 后只有匹配的车辆
    • 这与 return $v['type'] == 'Used' && $v['date'] == $today;如果我删除 && == $today,我会在一个数组中得到结果。我检查了日期格式,它们是正确的格式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2018-04-18
    • 2011-09-20
    • 2018-07-16
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多