子串是原字符串中连续的一段字符组成的字符串;例如"abc"的子串有""、"a"、"b"、"c"、"ab"、"bc"、"abc",生成方法是用两层循环控制起始与结束位置并调用substr()提取。

什么是子串
子串是原字符串中**连续的一段字符**组成的字符串。比如 "abc" 的所有子串是:""(空串)、"a"、"b"、"c"、"ab"、"bc"、"abc"。注意:"ac" 不是子串,因为它不连续。
生成所有子串的通用方法
用两层循环:外层控制起始位置 $i,内层控制结束位置 $j(满足 $j >= $i),再用 substr() 提取子串。
- 起始索引 $i 从 0 到 strlen($str) - 1
- 结束索引 $j 从 $i 到 strlen($str) - 1
- 每次调用 substr($str, $i, $j - $i + 1) 得到子串
完整可运行代码示例
以下函数返回一个包含所有非空子串的数组(如需含空串,可在循环外手动添加):
1、对ASP内核代码进行DLL封装,从而大大提高了用户的访问速度和安全性;2、采用后台生成HTML网页的格式,使程序访问速度得到进一步的提升;3、用户可发展下级会员并在下级购买商品时获得差额利润;4、全新模板选择功能;5、后台增加磁盘绑定功能;6、后台增加库存查询功能;7、后台增加财务统计功能;8、后台面值类型批量设定;9、后台财务曲线报表显示;10、完善订单功能;11、对所有传输的字符串进行安全
function getAllSubstrings(string $str): array {
$substrings = [];
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
for ($j = $i; $j < $len; $j++) {
$substrings[] = substr($str, $i, $j - $i + 1);
}
}
return $substrings;
}
<p>// 示例
print_r(getAllSubstrings("abc"));
// 输出:Array ( [0] => a [1] => ab [2] => abc [3] => b [4] => bc [5] => c )
注意事项与优化提示
子串总数是 n × (n + 1) / 2(不含空串),当字符串很长时(如长度 > 1000),内存和性能会迅速上升。
立即学习“PHP免费学习笔记(深入)”;
- 如只需判断是否存在某子串,不要全量生成,改用 strpos() 或正则
- 如需去重,可在返回前用 array_unique() 处理(但注意键会重排)
- 若要包含空字符串,可在函数开头加 $substrings[] = "";










