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, я что-то упускаю?

Author: mcgrailm, 2011-05-24

11 answers

Нет, то, как ты это делаешь, просто прекрасно. implode() принимает только 1-2 параметра (если вы просто предоставляете массив, он соединяет части пустой строкой).

 23
Author: Rafe Kettler, 2011-05-23 20:10:00
$array = array('lastname', 'email', 'phone');


echo "'" . implode("','", $array) . "'";
 131
Author: Umesh Moghariya, 2012-04-06 13:25:34

Вы могли бы использовать array_map():

function add_quotes($str) {
    return sprintf("'%s'", $str);
}

$csv =  implode(',', array_map('add_quotes', $array));

ДЕМО-ВЕРСИЯ

Также обратите внимание, что существует fputcsv если вы хотите записать в файл.

 40
Author: Felix Kling, 2011-05-23 20:12:46

Не знаю, быстрее ли это, но вы могли бы сохранить строку кода с помощью своего метода:

От

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

Чтобы:

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";
 22
Author: Drew Dello Stritto, 2013-02-01 04:36:10
$ids = sprintf("'%s'", implode("','", $ids ) );
 13
Author: Robb, 2016-12-12 19:26:20

Если вы хотите использовать циклы, вы также можете сделать:

$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
   $value = "'$value'";
}
$comma_separated = implode(",", $array);

Демонстрация: http://codepad.org/O2kB4fRo

 7
Author: Neal, 2011-05-23 20:12:34

В качестве альтернативы вы можете создать такую функцию:

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}
 2
Author: Nurlan Alekberov, 2016-08-23 06:29:37

Вы также можете сделать это таким образом

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>
 0
Author: Senad Meškin, 2011-05-23 20:16:59

Я думаю, что это то, что вы пытаетесь сделать

$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";
 0
Author: rack_nilesh, 2014-09-03 13:33:02

Если вы хотите избежать подсистем 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";
}

Затем вы можете вывести строку по желанию.

 0
Author: doublejosh, 2016-06-27 23:59:57

Еще один возможный вариант, в зависимости от того, для чего вам нужен массив:

$array = array('lastname', 'email', 'phone');
echo json_encode($array);

Это поместит '[' и ']' вокруг строки, которая вам может понадобиться, а может и не понадобиться.

 0
Author: Jeremy French, 2018-06-12 12:55:21