php взрывается (101) с кавычками
Взрыв простого массива
Будет выглядеть так
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
И это вернуло бы это
lastname,email,phone
Отлично, так что я мог бы сделать это вместо
$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";
И теперь у меня есть то, что я хочу, красивая симпатичная строка csv
'lastname','email','phone'
Есть ли лучший способ сделать это, мне кажется, что должен быть необязательный параметр для implode, я что-то упускаю?
11 answers
Нет, то, как ты это делаешь, просто прекрасно. implode()
принимает только 1-2 параметра (если вы просто предоставляете массив, он соединяет части пустой строкой).
$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", $array) . "'";
Вы могли бы использовать array_map()
:
function add_quotes($str) {
return sprintf("'%s'", $str);
}
$csv = implode(',', array_map('add_quotes', $array));
ДЕМО-ВЕРСИЯ
Также обратите внимание, что существует fputcsv
если вы хотите записать в файл.
Не знаю, быстрее ли это, но вы могли бы сохранить строку кода с помощью своего метода:
От
$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";
Чтобы:
$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";
$ids = sprintf("'%s'", implode("','", $ids ) );
Если вы хотите использовать циклы, вы также можете сделать:
$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
$value = "'$value'";
}
$comma_separated = implode(",", $array);
Демонстрация: http://codepad.org/O2kB4fRo
В качестве альтернативы вы можете создать такую функцию:
function implode_with_quotes(array $data)
{
return sprintf("'%s'", implode("', '", $data));
}
Вы также можете сделать это таким образом
<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>
Я думаю, что это то, что вы пытаетесь сделать
$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";
Если вы хотите избежать подсистем fopen/fputcsv, вот фрагмент, который создает экранированную строку CSV из ассоциативного массива....
$output = '';
foreach ($list as $row) {
$output .= '"' . implode('", "', array_values($row)) . '"' . "\r\n";
}
Или из списка объектов...
foreach ($list as $obj) {
$output .= '"' . implode('", "', array_values((array) $obj)) . '"' . "\r\n";
}
Затем вы можете вывести строку по желанию.
Еще один возможный вариант, в зависимости от того, для чего вам нужен массив:
$array = array('lastname', 'email', 'phone');
echo json_encode($array);
Это поместит '[' и ']' вокруг строки, которая вам может понадобиться, а может и не понадобиться.