PHP Warning: implode() [function.implode]: Invalid arguments passed in ...
代碼片段:
<?php
echo $fileddata['house_feature']; // 輸出: "南北通透|||隨時看房|||交通便利"
if ($fileddata['house_feature']) {
// 錯誤:$fileddata['house_feature'] 是字串,非陣列!
$fileddata['house_feature'] = implode('|||', $fileddata['house_feature']);
}
?>
implode(string $separator, array $array): string **第二參數必須是陣列**。傳入字串會觸發警告並返回 `null` (PHP 8.0+ 拋出 `TypeError`)。
原代碼意圖可能是:將字串按分隔符拆分為陣列,再用其他分隔符合併,或單純替換分隔符。
直接替換分隔符,無需拆分合併:
<?php
$str = '南北通透|||隨時看房|||交通便利';
// 將 ||| 替換為 ,
$newStr = str_replace('|||', ',', $str);
// 結果: "南北通透,隨時看房,交通便利"
?>
<?php
$str = '南北通透|||隨時看房|||交通便利';
// 1. 拆分為陣列
$arr = explode('|||', $str); // ['南北通透', '隨時看房', '交通便利']
// 2. 陣列處理 (如去重、過濾、排序...)
$arr = array_unique($arr);
$arr = array_filter($arr, fn($v) => $v !== '');
// 3. 合併為字串
$newStr = implode(',', $arr); // 正確:傳入陣列
?>
<?php
function safeImplode(string $glue, $pieces): string {
if (is_array($pieces)) {
return implode($glue, $pieces);
}
if (is_string($pieces)) {
return $pieces; // 或按需處理
}
return ''; // 其他類型返回空
}
// 使用
$fileddata['house_feature'] = safeImplode(',', $fileddata['house_feature']);
?>
implode(string $separator, array $array): string
// 歷史別名:join()
| 錯誤代碼 | 問題 | 修正 |
|---|---|---|
| `implode(',', $string)` | 傳入字串非陣列 | `str_replace('old', ',', $string)` 或 `explode` 後 `implode` |
| `implode($array)` | 缺少分隔符參數 (PHP 8.0+ 報錯) | `implode('', $array)` 或 `implode(',', $array)` |
| `implode(',', $obj)` | 傳入對象非陣列 | `implode(',', (array)$obj)` 或實現 `__toString` 後按需處理 |
| `implode(',', $arr1, $arr2)` | 參數過多 | 先合併陣列 `implode(',', array_merge($arr1, $arr2))` |