2017-10-14 1 views
0

Ich möchte alle Zahlen, die in einer Zeichenfolge auftreten, speichern. Die ganzen Zahlen müssen selbst vorkommen und von weißem Raum umgeben sein.Speichern von Zahlen aus einer Zeichenfolge

Hier ist, was ich meine:

Eingang

blah 5 blah bl3h 555 blah 123 blah A2B3 5030a

Erwartete Ausgabe

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


Hier Iterator meines versucht, dass das aktuelle Wort richtig Gruppe scheint aber fügt nichts zu dem Array

//$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

Ich war versucht, diese Seite als Duplikat wählen von: https://stackoverflow.com/questions/9452234/php-how-to-find- Zahlen in der Zeichenfolge, aber ich lasse den Link als Referenz. – mickmackusa

Antwort

3

Sofern Sie nicht ausdrücklich eine Schleife verwenden müssen , können Sie auf Platz explodieren und jeden Teilstring herausfiltern, der nicht aus Ziffern besteht.

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

Kleiner Tipp: Es ist auch möglich, '' 'ctype_digit''' mit' '' '' ''_n_numeric''' für negative & float Zahlen zu ersetzen. – user1597430

+0

@ user1597430 ja, aber ich würde jedem empfehlen, der das tut, um die is_numeric-Dokumentation sorgfältig zu lesen. Es hat das Potenzial, einige andere Dinge zu fangen, die Sie nicht als Zahlen betrachten möchten. –

+0

@ user1597430 Negative und Floats scheinen kein Problem mit der Aufgabe des OP zu sein. "Integer" ist in der Frage angegeben. Wenn die Zahlen negativ sein können, muss das OP klären. – mickmackusa

1

können Sie regular expressions für diese. Die \ escape sequence wird alle Ziffern in der Betreffzeile übereinstimmen.

Zum Beispiel:

<?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

Dieser Weg sollte schneller sein als das, was ich vorgeschlagen habe. –

+0

Sie müssen Wortgrenzen hinzufügen, damit beispielsweise "fo1400o" nicht übereinstimmt. – ishegg

+0

@ishegg ich habe es hinzugefügt – M0ns1f

Verwandte Themen