PHP-获取数字,而不是字符串中的char

时间:2018-08-20 14:17:34

标签: php arrays string substring

在这种情况下,我对php不太熟悉,并陷入了如何使用substr的问题:

我必须对具有一些数字和符号的字符串进行解析, 示例:

1[2[3,5],4[7[65,9,11],8]]

要做到这一点,我使用了一个,它将通过并获取字符串的每个字符, 像这样的东西:

$count = 0;
for($i = 0; $i <= strlen($string); $i++){
    $char = substr($string, $i, 1);
    if($char == '['){
        $count --;
    }
    if($char == ']'){
        $count ++;
    }
    if($count == 0){
        break;
    }

    if(is_numeric(substr($string, $i +1, 1)) and $count == -1){
        $number = substr($string, $i +1, 1);
        $array_aux[] = $number;
    }

}

但是当我输入char(substr($ string,$ i,1))时,它不适用于多于一个数字的数字,例如65和11

数组的内容类似于:(...,6,5,9,9,1,1,...)

什么时候应该是这样的:(...,65、9、11,...)

有帮助吗?

抱歉,我认为还不够清楚。 当count的值为-1

时,我需要'['内的数字

(这就是为什么我使用substr并获取每个字符的原因)

示例:当字符串为:1 [2 [3,5],4 [7 [65,9,11],8]]时,数组必须包含2和4

当字符串为:2 [3,5],4 [7 [65,9,11],8]]时,数组必须包含3和5

当字符串为:7 [65,9,11],8]]时,数组必须包含65、9和11。依此类推...

很抱歉,现在才提供这些详细信息,我当时没有电脑:(

2 个答案:

答案 0 :(得分:6)

preg_match_all(带有简单的正则表达式)可以为您做到这一点:

$in = "1[2[3,5],4[7[65,9,11],8]]";
preg_match_all('~\d+~', $in, $out);
print_r($out[0]);

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 4
    [5] => 7
    [6] => 65
    [7] => 9
    [8] => 11
    [9] => 8
)

答案 1 :(得分:1)

您可以使用preg_split并通过匹配一次或多次而不是数字\D+来进行拆分

$str = "1[2[3,5],4[7[65,9,11],8]]";
print_r(preg_split("/\D+/", $str, -1, PREG_SPLIT_NO_EMPTY));

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 4
    [5] => 7
    [6] => 65
    [7] => 9
    [8] => 11
    [9] => 8
)