从字符串中获取数字作为模式并将其存储在数组中

时间:2015-09-26 20:14:30

标签: php arrays regex string pattern-matching

我有一个包含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"

1 个答案:

答案 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;
}

Ideone demo

基本上:

  • $n是给定传递中所需的数量。从数字数减少到1。
  • $i是新结果项应从输入字符串开始复制的起始索引。从0开始并为每个结果项递增,直到项的最后一个数字与输入的最后一个数相同。