猿问

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

我正在尝试从 .CSV 获取数据,将其排序为数组(使用 PHP),在其中选择特定值,从该选择中创建一个新数组并将其编码为可与 ajax 一起使用的 json 对象。


有了这段代码,我几乎可以得到我想要的。


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

$csv["data"] = array_map('str_getcsv', file($CSV_url));   // to PHP array

array_shift($csv["data"]);                                // remove first line (headers)

$jsonData = json_encode($csv);                            // to Json

CSV 文件每行包含大约 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 ?


沧海一幻觉
浏览 96回答 2
2回答

慕容森

在您读取文件时处理它可能会更好,使用fopen()并且fgetcsv()您可以只提取您想要的项目到结果而不是全部存储。$CSV_url = '../fichier-csv/commande.csv';$fh = fopen($CSV_url, "r");$csv = [ "data" => [] ];fgets($fh);             // Ignore headerwhile ( $row = fgetcsv($fh) )   {    $csv["data"][] = [$row[0], $row[8], $row[9], $row[12]];}fclose($fh);$jsonData = json_encode($csv);

忽然笑

您可以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"];
随时随地看视频慕课网APP
我要回答