PHP implode (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 я что-то упустил ?

844   11  

11 ответов:

нет, то, как вы это делаете, просто отлично. 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."'";

To:

$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);

Demo: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);

это поставит ' ['и'] ' вокруг строки, которую вы можете или не хотите.

Comments

    Ничего не найдено.