为了账号安全,请及时绑定邮箱和手机立即绑定

通过 PHP 数组对 CSV 数据进行排序

通过 PHP 数组对 CSV 数据进行排序

PHP
沧海一幻觉 2022-11-12 13:23:33
我正在尝试从 .CSV 获取数据,将其排序为数组(使用 PHP),在其中选择特定值,从该选择中创建一个新数组并将其编码为可与 ajax 一起使用的 json 对象。有了这段代码,我几乎可以得到我想要的。$CSV_url = '../fichier-csv/commande.csv';                 // CSV file $csv["data"] = array_map('str_getcsv', file($CSV_url));   // to PHP arrayarray_shift($csv["data"]);                                // remove first line (headers)$jsonData = json_encode($csv);                            // to JsonCSV 文件每行包含大约 16 个类别的数据,但我在最终的 json 中只需要其中的 4 个。我坚持这个结果。如果我在 json_encode ( $csv) 之前打印,我会得到一个很好的数组,但是我很难选择想要的数据并用它制作新数组(这是我认为应该这样做的方式,但我是初学者,也许有一种更简单的方法可以做到这一点)。输出的 Json 也应该按照每个数组的 [0] 值的升序排序。这是我得到的数组的开始(其中 378 个要处理):Array (    [data] => Array        (            [0] => Array                (                    [0] => 100120148                    [1] => 1.0000                    [2] => 7.4200                    [3] => 2.4700                    [4] => 4.9100                    [5] => 0.0000                    [6] => 14.8000                    [7] => 0.3000                    [8] => marie                    [9] => jardin                    [10] => 40 rue mazé                    [11] => 87400                    [12] => 066825197                    [13] => magicayllo64@hotmail.fr                    [14] => 1                    [15] => magicayllo64@hotmail.fr                )            [1] => Array                (                    [0] => 100120162                    [1] => 1.0000                    [2] => 45.7500                    [3] => 10.8000                    [4] => 8.2500                    [5] => 0.0000                    [6] => 64.8000                    [7] => 2.0000                    [8] => __                    [9] => Lucien fizon                    [10] => 56 impasse pazarre                    [11] => 25000                    [12] => 0649851473                    [13] => 144f21ds8u4u6f5f@shopify.com                    [14] => 4                    [15] => 144f21ds8u4u6f5f@shopify.com                )如何获取每个子数组的值 0、8、9 和 12 并用它创建一个新数组,以便我可以将这个所需的数组编码为 Json ?
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

在您读取文件时处理它可能会更好,使用fopen()并且fgetcsv()您可以只提取您想要的项目到结果而不是全部存储。


$CSV_url = '../fichier-csv/commande.csv';

$fh = fopen($CSV_url, "r");

$csv = [ "data" => [] ];

fgets($fh);             // Ignore header

while ( $row = fgetcsv($fh) )   {

    $csv["data"][] = [$row[0], $row[8], $row[9], $row[12]];

}

fclose($fh);

$jsonData = json_encode($csv);


查看完整回答
反对 回复 2022-11-12
?
忽然笑

TA贡献1806条经验 获得超5个赞

您可以array_map再次使用以仅选择每行中所需的列:


$csv["data"] = array_map(fn($row) => [$row[0], $row[8], $row[9], $row[12]], $csv["data"]);

如果您还没有使用 PHP 7.4,则需要使用传统语法而不是箭头函数:


$csv["data"] = array_map(function(row) {

    return [$row[0], $row[8], $row[9], $row[12]];

}, $csv["data"];



查看完整回答
反对 回复 2022-11-12
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信