我有一个 CSV 文件,如下所示:
first-key,first-value
second-key,second-value
third-key,third-value
fourth-key,fourth-value
我正在使用以下方法将它们读入数组:
$tmp_array = array_map('str_getcsv', file('./values.csv'));
但是,这会产生以下数组:
Array
(
[0] => Array
(
[0] => first-key
[1] => first-value
)
[1] => Array
(
[0] => second-key
[1] => second-value
)
[2] => Array
(
[0] => third-key
[1] => third-value
)
[3] => Array
(
[0] => fourth-key
[1] => fourth-value
)
)
我想要的是这个数组:
Array
(
[first-key] => first-value
[second-key] => second-value
[third-key] => third-value
[fourth-key] => fourth-value
)
实现这一目标的一种方法是这样做:
$tmp_array = array_map('str_getcsv', file('./values.csv'));
$array = [];
foreach ($tmp_array as $row) {
$array[$row[0]] = $row[1];
}
有更好的方法吗?也许使用array_map()
?
最佳答案
这取决于您在这种情况下对更好的定义。我认为你的解决方案已经足够好了。更好:
- 不使用 foreach?
- 减少行数?
- 变量较少?
- 使用更多标准库函数?
我想发布 2 个建议:
// 1
$tmp = array_map('str_getcsv', file('data.csv'));
$data = array_combine(array_column($tmp, 0), array_column($tmp, 1));
var_dump($data);
// 2
$data = [];
array_walk(
$tmp,
function($e) use (&$data) {$data[$e[0]] = $e[1];}
);
var_dump($data);
输出:
array(4) {
["first-key"]=>
string(11) "first-value"
["second-key"]=>
string(12) "second-value"
["third-key"]=>
string(11) "third-value"
["fourth-key"]=>
string(12) "fourth-value"
}
array(4) {
["first-key"]=>
string(11) "first-value"
["second-key"]=>
string(12) "second-value"
["third-key"]=>
string(11) "third-value"
["fourth-key"]=>
string(12) "fourth-value"
}
关于PHP 数组 - 从 CSV 文件读取,创建第一列键,第二列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63134438/