2017-10-14 164 views
0

我正在寻找将单独出现在字符串中的所有数字都存储起来。整数必须单独出现并被空白空间包围。从字符串中保存数字

这里就是我的意思是:

输入

等等5等等bl3h 555等等123等等A2B3 5030a

期望输出

[5 ],[55 5],[123]


这里是我的尝试迭代,似乎当前的单词正确组但却不会添加到阵列

//$a = String 
function numberReturn($a){ 

    $currWord; 

    $numberArray = array(); 

    //Loop through string 
    for($i = 0; $i < strlen($a); $i++){ 
     //Keep adding chars to current word 
     $currWord .= $a[$i]; 


     //if white space check if current word is only numeric 
     //if only numbers add it to array 
     //when added, clear current word 
     if(ctype_space($a[$i])){ 
      if(is_numeric($currWord)){ 
       $numberArray[] = $currWord; 
      } 
      $currWord = ""; 
     } 
    } 
    return $numberArray; 
} 
+0

我很想进行投票页面为重复的:https://stackoverflow.com/questions/9452234/php-how-to-find-字符串中的数字,但我只是将该链接作为参考。 – mickmackusa

回答

3

除非您特别需要使用一个循环,你可以在空间上爆炸并过滤掉每个不是由数字组成的子字符串。

$numbers = array_filter(explode(' ', $string), 'ctype_digit'); 
+1

小提示:也可以用''''is_numeric'''替换'''ctype_digit''作为负数和浮点数。 – user1597430

+0

@ user1597430是的,但我建议任何人仔细阅读is_numeric文档。它有可能捕捉你可能不想考虑为数字的其他一些东西。 –

+0

@ user1597430底片和花车似乎不是OP任务的问题。问题中提到“整数”。如果数字可能是负数,则由OP来澄清。 – mickmackusa

1

您可以使用regular expressions。 \ d escape sequence将匹配主题字符串中的所有数字。

例如:

<?php 

function get_numerics ($str) { 
    preg_match_all('/-?\.?(\d+((\.|,|)\d+)?)/', $str, $matches); 
    return $matches[0]; 
} 

$one = 'foo bar 4 baz (5 qux quux)'; 
$two = 'bar baz 2 bar'; 
$three = 'qux bar 12 quux (3 foo)'; 
$four = 'foo baz 3 bar (13 quux foo)'; 

print_r(get_numerics($one)); 
print_r(get_numerics($two)); 
print_r(get_numerics($three)); 
print_r(get_numerics($four)); 

https://3v4l.org/DiDBL

+0

这种方式应该比我建议的要快。 –

+0

您需要添加单词边界,以便与例如“fo1400o”不匹配。 – ishegg

+0

@ishegg我加了它 – M0ns1f