2017-10-14 4 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- numbers-in-stringではなく、リンクを参照のままにしておきます。 – mickmackusa

答えて

3

に何も加えない私が試みイテレータですあなたは宇宙で爆発し、数字で作られていないすべての部分文字列を除外することができます。

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

小さなヒント: '' ctype_digit'''を '' 'is_numeric'''に置き換えて、負の数と浮動小数点数にすることもできます。 – 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

関連する問題