簡體   English   中英

php 內爆 (101) 帶引號

[英]php implode (101) with quotes

內爆一個簡單的數組

看起來像這樣

$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 我錯過了什么嗎?

$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

$ids = sprintf("'%s'", implode("','", $ids ) );

不,你這樣做的方式很好。 implode()只需要 1-2 個參數(如果你只提供一個數組,它會通過一個空字符串連接各個部分)。

不知道它是否更快,但是,您可以使用您的方法保存一行代碼:

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

至:

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

如果你想使用循環,你也可以這樣做:

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

演示: http://codepad.org/O2kB4fRo

$id = array(2222,3333,4444,5555,6666);
$ids = "'".implode("','",$id)."'";

或者

$ids = sprintf("'%s'", implode("','", $id ) );

或者,您可以創建這樣的 function:

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}

如果你想避免 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";
}

然后您可以根據需要 output 字符串。

我認為這就是你想要做的

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

另一種可能的選擇,取決於您需要陣列的用途:

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

這會將 '[' 和 ']' 放在字符串周圍,您可能想要也可能不想要。

你也可以這樣做

<?php
$csv= '\'' . join(array('lastname', 'email', 'phone'),'\',').'\'';
echo $csv;
?>

不要忘記轉義您的數據! 如果要將數據放入 CSV 文件中而不使用 fputcsv function 或將其放入 SQL 查詢中,請使用以下代碼:

$comma_separated = "'" . implode("','", array_map('addslashes', $array)) . "'";

當輸入數組包含單引號反斜杠字符時,此代碼避免了 SQL 注入或數據碎片。

如果您需要保留雙引號(也許格式化 json?),您還可以:

$array = ["a", "b", "c"];
implode("\",\"", $array) // "a","b","c"

另一種解決方案是使用 implode + preg_replace 實現的,如下所示:

$a = ['A', 'B', 'C'];
implode(',', preg_replace('/^(.*)$/', '"$1"', $a)); // "A","B","C"
$b = [];
implode(',', preg_replace('/^(.*)$/', '"$1"', $b)); // empty string

如您所見,這也使您免於檢查數組是否為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM