PHP 从 csv 中获取类别和 ID

PHP get category and id from csv

我有一个如下所示的 CSV 文件:

CategoryA;ID0001;title1
CategoryA;ID0002;title2
CategoryB;ID0001;title3
CategoryB;ID0002;title4
CategoryC;ID0001;title5

[More categories, IDs and titles...]

为了按类别和每个类别中的相应 ID 对这些条目进行排序,我至少需要两个嵌套数组。第一个具有类别和像 "cat" 这样的键,第二个具有像 "id".

这样的键的 ID

我对此的糟糕尝试:

function read_csv($filename)
{
    $rows = [];

    foreach (file($filename, FILE_IGNORE_NEW_LINES) as $line) {
        $rows[] = str_getcsv($line, ';');
    };

    return $rows;
};

print_r(read_csv("file.csv"));

结果:

Array
(
    [0] => Array
        (
            [0] => A
            [1] => 0001
            [2] => titel1
        )

    [1] => Array
        (
            [0] => A
            [1] => 0002
            [2] => titel2
        )

    [2] => Array
        (
            [0] => B
            [1] => 0001
            [2] => titel3
        )

    [3] => Array
        (
            [0] => B
            [1] => 0002
            [2] => titel4
        )

    [4] => Array
        (
            [0] => C
            [1] => 0001
            [2] => titel5
        )

)

或者有重命名键的方法吗?到目前为止我尝试的一切都没有产生预期的结果。我该如何进行?

你真的需要一个数据库,即使是像 SQLite 这样简单的数据库。但为了好玩,您可以使用列名构造 CSV 数组:

$cols = array('cat', 'id', 'title');

foreach (file($filename, FILE_IGNORE_NEW_LINES) as $line){
    $rows[] = array_combine($cols, str_getcsv($line, ';'));
}

然后你可以使用array_column()并用array_multisort()排序:

array_multisort(array_column($rows, 'cat'),  $rows);

或者也许:

array_multisort(array_column($rows, 'cat'), array_column($rows, 'id'), $rows);

没有列名你仍然可以使用数字索引:

array_multisort(array_column($rows, 0), array_column($rows, 1), $rows);