這是一個適用於 PHP 的更好的陣列解析器。它僅適用於一維陣列。與下面的範例不同,它適用於所有情況。
/**
* 將資料庫陣列轉換為 PHP 陣列
* @param $arr 表示資料庫陣列的字串
* @return PHP 陣列
*/
function phpArray($dbarr) {
// 去除第一個和最後一個字元(大括號)
$arr = substr($dbarr, 1, strlen($dbarr) - 2);
// 透過仔細解析來挑選陣列元素。這是必要的,以便
// 處理雙引號、逗號等。
$elements = array();
$i = $j = 0;
$in_quotes = false;
while ($i < strlen($arr)) {
// 如果目前字元是雙引號且未被跳脫,則
// 進入引號區塊
$char = substr($arr, $i, 1);
if ($char == '"' && ($i == 0 || substr($arr, $i - 1, 1) != '\\'))
$in_quotes = !$in_quotes;
elseif ($char == ',' && !$in_quotes) {
// 將目前為止的文字添加到陣列
$elements[] = substr($arr, $j, $i - $j);
$j = $i + 1;
}
$i++;
}
// 將最後的文字添加到陣列
$elements[] = substr($arr, $j);
// 對 elements 陣列再進行一次迴圈,以移除雙引號
// 以及雙引號和反斜線的跳脫字元
for ($i = 0; $i < sizeof($elements); $i++) {
$v = $elements[$i];
if (strpos($v, '"') === 0) {
$v = substr($v, 1, strlen($v) - 2);
$v = str_replace('\\"', '"', $v);
$v = str_replace('\\\\', '\\', $v);
$elements[$i] = $v;
}
}
返回 $elements;
}