将字符串转换为数组

时间:2010-12-19 11:47:25

标签: php arrays

我有一个问题。我创建了一个包含连接变量的变量, 例如:

$a=89111213

我想获得这样的数组:

$b(
  1=>8,
  2=>9,
  3=>11,
  4=>12,
  5=>13
)

4 个答案:

答案 0 :(得分:2)

您可以使用explode()

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

<强>更新

正如@therefromhere在他的评论中所暗示的,不是将数字连接成一个字符串,而是将它们直接放在一个数组中:

$a = array();

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

}

这是一种有效的方法。

重要:
假设:数字按递增顺序连接,并以数字&lt; 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的内容。

答案 3 :(得分:1)

<? explode(" ", "a b c d e") ?>