Как создать массив из строки 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");
Author: ariefbayu, 2012-09-03

4 answers

@user113215 ответ хороший. Однако, если вам действительно нужен ассоциативный массив:

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

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

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

Пожалуйста, обратите внимание, что функция split устарела, вместо этого используйте explode.

 1
Author: Anthony Simmon, 2012-09-03 15:52:20

У вас уже есть базовое решение в вашем коде. Единственная строка, которая вам нужна, это:

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

С вашим примером ввода это даст вам следующий массив:

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

Если вам действительно нужно $USE['list'] в стиле пары ключ-значение (я не уверен, насколько это полезно, так как ключ и значение будут одинаковыми), вы могли бы сделать что-то вроде этого:

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

Однако, как уже упоминали другие, это определенно не самый безопасный способ анализа данных CSV (он не будет должным образом обрабатывать значения, содержащие запятые, значения, которые были заключены в кавычки, и т.д.). Если вы не можете использовать str_getcsv(), потому что у вас нет PHP 5.3.0 или выше, проверьте parsecsv-для-php.

 2
Author: user113215, 2012-09-03 16:22:09

Здесь есть много наивных реализаций, которые не следует использовать ни в каких, кроме самых простых случаев.

Правильный способ анализа CSV в PHP - использовать str_getcsv().

Или, по крайней мере, любое самопрокатное решение должно учитывать значения в кавычках (в этот момент вам также необходимо учитывать экранированные кавычки). В противном случае вы получите неправильные преобразования и потенциально повредите данные CSV (создав кошмар для следующего парня, которому придется использовать поврежденный CSV данные).

 1
Author: Lèse majesté, 2012-09-03 16:09:37

Старайтесь не использовать split, так как он был амортизирован.

<?php

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


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

   $USE['list'] = $array;

var_dump($USE['list']);

?>
 0
Author: Mike, 2012-09-03 15:51:45