Как игнорировать числа / цифры в строке с помощью функции explode () или preg_split () - PullRequest
1 голос
/ 16 июня 2019

Я хочу сделать функцию разнесения или preg_split, чтобы игнорировать числа / цифры.

$string = "my name is numbre 9000 900 1";

$dictionary = array("my", "name", "is", "number");

$words = explode(' ',$string);

foreach($words as $wrd):

if(in_Array($wrd, $dictionary)){
  echo $wrd;
}
elseif(in_Array($wrd, $dictionary) == FALSE){
  echo $wrd."->wrong";
}

желаемый вывод должен быть:

my
name
is
numbre<-wrong
9000
900
1

not:

my
name
is
numbre<-wrong
9000<-wrong
900<-wrong
1<-wrong

Есть идеи, как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 16 июня 2019

Как упоминалось в комментарии, вы можете использовать или ||, чтобы проверить, является ли строка is_numeric .

Обратите внимание, что вы можете написать свой код немного короче:

$string = "my name is numbre 9000 900 1";
$dictionary = array("my", "name", "is", "number");
foreach(explode(' ',$string) as $wrd){
    if(in_array($wrd, $dictionary) || is_numeric($wrd)){
        echo $wrd . PHP_EOL;
    } else {
        echo $wrd."->wrong" . PHP_EOL;
    }
}

Результат:

my
name
is
numbre->wrong
9000
900
1

См. php demo

2 голосов
/ 16 июня 2019

Ваш оригинальный метод в порядке, мы немного изменим его и применим preg_split. Здесь мы сначала проверяем is_numeric, если TRUE мы continue, то мы array_search наш словарь, если FALSE мы добавляем ->wrong, в противном случае мы continue.

Тест

$str = "my name is numbre 9000 900 1 and some other undesired words";
$dictionary = array("my", "name", "is", "number");
$arr = preg_split('/\s/', $str);

foreach ($arr as $key => $value) {
    if (is_numeric($value)) {
        continue;
    } elseif (array_search($value, $dictionary) === false) {
        $arr[$key] = $value . "->wrong";
    } else {
        continue;
    }
}

var_dump($arr);

выход

array(12) {
  [0]=>
  string(2) "my"
  [1]=>
  string(4) "name"
  [2]=>
  string(2) "is"
  [3]=>
  string(13) "numbre->wrong"
  [4]=>
  string(4) "9000"
  [5]=>
  string(3) "900"
  [6]=>
  string(1) "1"
  [7]=>
  string(10) "and->wrong"
  [8]=>
  string(11) "some->wrong"
  [9]=>
  string(12) "other->wrong"
  [10]=>
  string(16) "undesired->wrong"
  [11]=>
  string(12) "words->wrong"
}

RegEx Demo

...