这是一个更好的 PHP 数组解析器。它将仅适用于一维数组。与下面的示例不同,它将在所有情况下都能正常工作。
/**
* 将 db 数组转换为 PHP 数组
* @param $arr 表示 DB 数组的字符串
* @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;
}
}
return $elements;
}