Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php-从字符串中获取数字,而不是字符_Php_Arrays_String_Substring - Fatal编程技术网

Php-从字符串中获取数字,而不是字符

Php-从字符串中获取数字,而不是字符,php,arrays,string,substring,Php,Arrays,String,Substring,我对php不是很熟悉,在这种情况下,我被如何使用substr所困扰: 我必须解析一个包含数字和符号的字符串, 例如: 1[2[3,5],4[7[65,9,11],8]] 为了做到这一点,我使用了一个for,它将遍历并获取字符串的每个字符, 诸如此类: $count = 0; for($i = 0; $i <= strlen($string); $i++){ $char = substr($string, $i, 1); if($char == '['){

我对php不是很熟悉,在这种情况下,我被如何使用substr所困扰:

我必须解析一个包含数字和符号的字符串, 例如:

1[2[3,5],4[7[65,9,11],8]]
为了做到这一点,我使用了一个for,它将遍历并获取字符串的每个字符, 诸如此类:

$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;
    }

}
但是当我在substr$string$I,1中获取字符时,它不适用于超过一个数字的数字,例如65和11

数组的内容有:…,6,5,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。等等

很抱歉,现在才公布这些详细信息,我没有电脑:

preg\u match\u所有带有简单正则表达式的程序都可以为您执行此操作:

$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
)
您可以通过匹配一次或多次而不是数字来使用和拆分\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
)