如何从csv字符串创建数组?

时间:2012-09-03 15:45:47

标签: php arrays select csv

我试图从csv变量创建和数组:

$csv="one,two,tree,four";


$bits = split(',',$csv);
$elements = array();
for ($i=0;$i<count($bits);$i++) 
{
    $item .= '"'.$bits[$i].'"=>"'.$bits[$i].'",';
}

$item = substr($item, 0, -1);
$ara=array($item);

$USE['list'] = $ara;

我需要获得这样的东西,那就是全部:

$USE['list'] = array("one"=>"one","two"=>"two","tree"=>"tree","four"=>"four");

4 个答案:

答案 0 :(得分:2)

您的代码中已有基本解决方案。你唯一需要的是:

$bits = split(',', $csv);

使用您的示例输入,这将为您提供以下数组:

$bits = array("one", "two", "three", "four");

如果你真的需要键值对样式$USE['list'](我不确定这有什么用,因为键和值会相同),你可以这样做:

$USE['list'] = array();
foreach($bits as $bit) {
    $USE['list'][$bit] = $bit;
}

但是,正如其他人所提到的,这绝对不是解析CSV数据最安全的方法(它不能正确处理包含逗号,已引用的值等的值)。如果您因为没有PHP 5.3.0或更高版本而无法使用str_getcsv(),请查看parsecsv-for-php

答案 1 :(得分:1)

@ user113215的回答很好。但是,如果你真的需要一个关联数组:

$csv = 'one,two,tree,four';
$USE['list'] = array();

$bits = explode(',', $csv);

foreach($bits as $bit) 
{
    $USE['list'][$bit] = $bit;
}

请注意,拆分功能已弃用,请改用爆炸

答案 2 :(得分:1)

这里有许多天真的实现,除了最基本的情况之外,不应该使用它们。

在PHP中解析CSV的正确方法是使用str_getcsv()

或者,至少,任何自动解决方案都应考虑引用值(此时您还需要考虑转义引号)。否则,您将获得错误的转换并可能损坏CSV数据(为下一个必须使用损坏的CSV数据的人造成噩梦。)

答案 3 :(得分:0)

尽量不要使用拆分,因为它已被折旧。

<?php

$csv="one,two,tree,four";


$bits = explode(',',$csv);
foreach($bits as $value) {
    $array[$value] = $value;
}

   $USE['list'] = $array;

var_dump($USE['list']);

?>