
本文介绍一种简洁可靠的方法,使用正则过滤与嵌套 explode 解析形如 "23":"673",4:6 的混合格式字符串,将其拆分为多个数值对,并存入二维数组,便于后续分别赋值给不同变量。
本文介绍一种简洁可靠的方法,使用正则过滤与嵌套 explode 解析形如 `"23":"673",4:6` 的混合格式字符串,将其拆分为多个数值对,并存入二维数组,便于后续分别赋值给不同变量。
在 PHP 开发中,常需从非标准格式的字符串中提取结构化数据。例如,输入字符串可能包含引号、冒号、逗号等混排字符(如 '"3":"6","23":"673",4:6'),但其语义始终表示若干组「键:值」形式的数字对,且每组恰好含两个整数。作为初学者,无需依赖 JSON 解析或复杂状态机,只需两步核心操作:清洗与分层分割。
首先,用 preg_replace('/[^\d\:\,]/', '', $string) 移除所有非数字、非冒号、非逗号字符,将原始字符串统一规整为纯数字+分隔符格式(如 '"23":"673",4:6' → '23:673,4:6')。接着,外层 explode(',', ...) 按逗号切分出各数据对;再对每个子串执行 explode(':', ...),得到每组的两个数值。
以下是完整可运行示例:
<?php
$string = '"23":"673",4:6';
// 步骤1:只保留数字、冒号、逗号
$cleaned = preg_replace('/[^\d\:\,]/', '', $string);
// 步骤2:按逗号分割为多组
$pairs = explode(',', $cleaned);
// 步骤3:对每组再按冒号分割,构建二维数组
$result = [];
foreach ($pairs as $pair) {
if (trim($pair) !== '') { // 防空项
$parts = explode(':', $pair);
if (count($parts) === 2) {
$result[] = [
'first' => (int)$parts[0], // 转为整型更安全
'second' => (int)$parts[1]
];
}
}
}
// 输出结果(便于调试)
print_r($result);
// 输出:
// Array (
// [0] => Array ( [first] => 23 [second] => 673 )
// [1] => Array ( [first] => 4 [second] => 6 )
// )
// ✅ 如需分别赋值给独立变量(例如处理第一对):
if (!empty($result)) {
$varA = $result[0]['first']; // 23
$varB = $result[0]['second']; // 673
echo "第一组:A = $varA, B = $varB\n";
}
?>⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 若原始字符串可能为空或格式异常,务必添加 if (!empty($pairs)) 和 if (count($parts) === 2) 校验,避免 undefined index 错误;
- 使用 (int) 强制类型转换可防止前导零被误解析(如 "05": "007" → 5 和 7),若需保留原字符串形式(如带前导零的编码),请移除类型转换;
- 该方法不依赖外部扩展,兼容 PHP 5.6+,适合入门项目快速实现。
通过这一模式,你不仅能高效提取数据,还能清晰理解字符串处理的通用思路:先标准化,再结构化。



















