2017-10-14 119 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