将没有分隔符的数字字符串转换为潜在多位数字的数组

问题描述 投票:0回答:4

如何将没有分隔符的字符串(例如

$a = '89111213';
)拆分为整数数组?

想要的结果:

[8, 9, 11, 12, 13]

我在循环中生成该输入数字,并像

$a .= $somevariable;
那样串联。

php arrays split numeric
4个回答
2
投票

更新:

正如 @therefromhere 在他的评论中建议的那样,不要将数字连接成一个字符串,而是直接将它们放入一个数组中:

$a = array();

for(...) {
    $a[] = $somevariable;

}

这在某种程度上是有效的。

重要:
假设: 数字按升序连接并以数字开头 < 10 :)

$str = "89111213";
$numbers = array();
$last = 0;
$n = '';
for($i = 0, $l = strlen($str);$i<$l;$i++) {
    $n .= $str[$i];
    if($n > $last || ($i == $l - 1)) {
        $numbers[] = (int) $n;
        $last = $n;
        $n = '';
    }
}

print_r($numbers);

打印

Array
(
    [0] => 8
    [1] => 9
    [2] => 11
    [3] => 12
    [4] => 13
)

虽然这可能在某种程度上有效,但在很多情况下会失败。因此:

如何获得

89111213
?如果您从数字 8、9、11 等生成它,您应该生成类似
8,9,11,12,13
的内容。


2
投票

你可以使用explode():

$b = explode(' ', $a);

2
投票

这看起来很危险。您是否将多个数字连接成一个整数?请注意,整数值有上限,因此您可能会遇到许多元素的错误。

另请注意,当数字具有不同长度时,您的问题无法正确解决,因为您无法知道这些组合(如果有)中的哪一个是正确的

89111213

  • 8、9、11、12、13
  • 89、111、213
  • 8、9、11、1213
  • 8、91、11213

您将需要某种分隔符以使其稳定且面向未来。


1
投票
<? explode(" ", "a b c d e") ?>
© www.soinside.com 2019 - 2024. All rights reserved.