我有一个包含5个数字的字符串,我需要将它们分开并将它们存储在一个数组中。我一直试图想出一个函数来做几个小时,但没有成功,所以我想知道是否有人有任何想法来完成这个,或者是否有一个内置方法来做到这一点?
$string = "1 2 3 4 5"
要求的结果
$array[0] = "1 2 3 4 5" (5)
$array[1] = "1 2 3 4" (4)
$array[2] = "2 3 4 5" (4)
$array[3] = "1 2 3" (3)
$array[4] = "2 3 4" (3)
$array[5] = "3 4 5" (3)
$array[6] = "1 2" (2)
$array[7] = "2 3" (2)
$array[8] = "3 4" (2)
$array[9] = "4 5" (2)
$array[10] = "1" (1)
$array[11] = "2" (1)
$array[12] = "3" (1)
$array[13] = "4" (1)
$array[14] = "5" (1)
P.S:示例字符串的数字是其中的5个,但这只是一个例子。工作功能应该适用于任何数量的数字。谢谢。
编辑:我不需要一个函数来爆炸它。我已经知道爆炸功能了。无论数量多少,我都要求函数将结果发送到需求结果以下。因此,如果数字为“1 2 3 4 5 6 7 8 9 10”,则结果将类似于以下模式需要结果。
重点应放在低于要求结果的模式上。那些模式是我想要获得的模式。我需要一个函数来获取那些确切的模式。
更多例子
$string = "1 2 3 4"
$array[0] = "1 2 3 4"
$array[1] = "1 2 3"
$array[2] = "2 3 4"
$array[3] = "1 2"
$array[4] = "2 3"
$array[5] = "3 4"
$array[6] = "1"
$array[7] = "2"
$array[8] = "3"
$array[9] = "4"
答案 0 :(得分:2)
这是一个执行此操作的功能:
function do_the_thing($string) {
$numbers = explode(' ', $string);
$result = array();
for ($n = count($numbers); $n >= 1; --$n) {
for ($i = 0; $i <= count($numbers) - $n; ++$i) {
$result[] = implode(' ', array_slice($numbers, $i, $n));
}
}
return $result;
}
基本上:
$n
是给定传递中所需的数量。从数字数减少到1。$i
是新结果项应从输入字符串开始复制的起始索引。从0开始并为每个结果项递增,直到项的最后一个数字与输入的最后一个数相同。