Как создать массив из строки 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 answers
@user113215 ответ хороший. Однако, если вам действительно нужен ассоциативный массив:
$csv = 'one,two,tree,four';
$USE['list'] = array();
$bits = explode(',', $csv);
foreach($bits as $bit)
{
$USE['list'][$bit] = $bit;
}
Пожалуйста, обратите внимание, что функция split устарела, вместо этого используйте explode.
У вас уже есть базовое решение в вашем коде. Единственная строка, которая вам нужна, это:
$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.
Здесь есть много наивных реализаций, которые не следует использовать ни в каких, кроме самых простых случаев.
Правильный способ анализа CSV в PHP - использовать str_getcsv()
.
Или, по крайней мере, любое самопрокатное решение должно учитывать значения в кавычках (в этот момент вам также необходимо учитывать экранированные кавычки). В противном случае вы получите неправильные преобразования и потенциально повредите данные CSV (создав кошмар для следующего парня, которому придется использовать поврежденный CSV данные).
Старайтесь не использовать split, так как он был амортизирован.
<?php
$csv="one,two,tree,four";
$bits = explode(',',$csv);
foreach($bits as $value) {
$array[$value] = $value;
}
$USE['list'] = $array;
var_dump($USE['list']);
?>