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);
我有一个如下所示的 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);