我需要转换格式
的字符串"a b c"
到表格
的数组中Array
(
[0] => a
[1] => a b
[2] => a b c
[3] => b
[4] => b c
[5] => c
)
PHP是否提供将字符串转换为所有子字符串的本机函数?如果没有,那么获得所有子串的阻力最小的路径是什么?是否有一种直接的方法可能爆炸()字符串,并使用数组操作生成所有[有序]排列?
干杯!
答案 0 :(得分:13)
使用 in-php-array-is-the-duct-of-the-universe 方式:P
function get_all_substrings($input, $delim = '') {
$arr = explode($delim, $input);
$out = array();
for ($i = 0; $i < count($arr); $i++) {
for ($j = $i; $j < count($arr); $j++) {
$out[] = implode($delim, array_slice($arr, $i, $j - $i + 1));
}
}
return $out;
}
$subs = get_all_substrings("a b c", " ");
print_r($subs);
答案 1 :(得分:7)
<?php
function get_all_substrings($input){
$subs = array();
$length = strlen($input);
for($i=0; $i<$length; $i++){
for($j=$i; $j<$length; $j++){
$subs[] = substr($input, $i, $j);
}
}
return $subs;
}
$subs = get_all_substrings("Hello world!");
print_r($subs);
?>
即使有一个花哨的双线来完成这个,我怀疑它更有效或更容易理解(对于任何人理解它,他们可能不得不看看文档。大多数人可能得到什么substr没有甚至查找它。)
答案 2 :(得分:3)
对第二个小修正:
<?php
function get_all_substrings($input){
$subs = array();
$length = strlen($input);
for($i=0; $i<$length; $i++){
for($j=$i; $j<$length; $j++){
$subs[] = substr($input, $i, ($j - $i) + 1);
}
}
return $subs;
}
$subs = get_all_substrings("abc");
print_r($subs);
?>
答案 3 :(得分:1)
子字符串不是排列。 explode()
字符串,然后使用两个嵌套循环和array_slice()
来获取相关元素。
答案 4 :(得分:1)
所有可能的子字符串
<?php
$str1 = "ABCD";
$len = strlen($str1);
$arr = array();
for($i = 0; $i < $len; $i++){
for($j = 0; $j < $len - $i; $j++){
$arr [] = substr($str1,$i,($j+1));
}
}
echo(json_encode($arr));
?>
答案 5 :(得分:0)
他们已经可以考虑那种形式的数组。
只需使用以索引作为参数的函数来处理内容,并返回适当切割的字符串。
答案 6 :(得分:0)
如果没有递归回答,这个问题就不会完整:
function get_substrings($str){
$len = strlen($str);
$ans = array();
$rest = array();
for ($i = 1; $i <= $len; $i++) {
$ans[] = substr($str, 0, $i);
}
if($str){
$rest = get_substrings(substr($str, 1));
}
return array_merge($ans, $rest);
}
$subs = get_substrings("abc");
print_r($subs);
答案 7 :(得分:0)
这是有效的,它也适用于多字节字符串,上面的所有方法都没有,它们返回null和重复的值。
function substrings($str, $charset = 'UTF-8') {
$length = mb_strlen($str, $charset);
$subs = [];
for ($i = 0; $i < $length; $i++)
for ($j = 1; $j <= $length; $j++)
$subs[] = mb_substr($str, $i, $j, $charset);
return array_unique($subs);
}
print_r(substrings("php"));
答案 8 :(得分:-4)
即使是非常短的字符串,内存和运行时要求也会爆炸。即使在本机代码中,这也是一个可怕的性能问题。
证明你为什么需要这个功能,并找出解决问题的另一种方法。