You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何从指定格式字符串中提取可变数量的数值?

当然没问题!PHP完全能搞定这个需求,我给你分享两个实用的方案,不管是1个还是3个数值都能轻松处理:

方法一:用explode()分割+过滤空元素

这个方法适配你的字符串格式,通过分割符拆分后清理无效内容:

$str = "-1--52--18-";
// 用'-'把字符串拆分成数组
$splitParts = explode('-', $str);
// 过滤掉数组里的空字符串(分割后会产生不少空元素)
$validNums = array_filter($splitParts, function($item) {
    return trim($item) !== '';
});
// 重置数组索引,让它从0开始(方便后续取值)
$validNums = array_values($validNums);

// 按需赋值给变量,不存在的话设为空字符串(你可以改成null/0等默认值)
$Var1 = isset($validNums[0]) ? $validNums[0] : '';
$Var2 = isset($validNums[1]) ? $validNums[1] : '';
$Var3 = isset($validNums[2]) ? $validNums[2] : '';

// 测试输出
echo $Var1; // 输出 "1"
echo $Var2; // 输出 "52"
echo $Var3; // 输出 "18"

这个方法逻辑直观,就算字符串里的分隔符数量有变化(比如多个-连在一起)也能正常工作。

方法二:用正则表达式精准匹配数字

如果你的字符串后续可能出现其他非数字内容,正则会更可靠,直接提取所有连续数字:

$str = "-1--52--18-";
// 匹配所有连续的数字序列,结果存在$matches[0]里
preg_match_all('/\d+/', $str, $matches);
$validNums = $matches[0];

// 同样赋值变量
$Var1 = isset($validNums[0]) ? $validNums[0] : '';
$Var2 = isset($validNums[1]) ? $validNums[1] : '';
$Var3 = isset($validNums[2]) ? $validNums[2] : '';

这个方法兼容性更强,不管分隔符是什么,只要是连续的数字都能被提取出来,适合更复杂的场景。

两种方法都支持1-3个数值的情况:如果只有1个数值,那$Var2和$Var3会是你设置的默认值;如果有3个,就全部正常赋值。

内容的提问来源于stack exchange,提问作者Tut Ozz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:38:33