PHP - нормализовать пользовательский массив ввода - PullRequest
1 голос
/ 16 декабря 2010

Если есть массив, подобный этому:

array
  0 => string '62 52, 53' (length=9)
  1 => string '54' (length=2)

Это из пользовательского ввода, и вы никогда не знаете, как / что они вводят;)

В конце я хочу получить следующее:

array
  0 => string '62' (length=2)
  1 => string '52' (length=2)
  2 => string '53' (length=2)
  3 => string '54' (length=2)

Вот как я это делаю:

  $string = implode(',', $array);
  $string = str_replace(', ', ',', $string);
  $string = str_replace(' ', ',', $string);
  $array = explode(',', $string);

Кажется действительно неуклюжим.Есть ли более элегантный способ?Тот, который может иметь лучшую производительность?

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

На каждой строке:

preg_match_all("/[ ,]*(\d+)[ ,]*/", $list, $matches);

Затем читать $matches[1] для чисел

2 голосов
/ 16 декабря 2010

Не уверен насчет производительности, но вы можете использовать регулярное выражение для захвата только чисел после того, как вы объедините все в строку.

$string = implode(' ', $array);
preg_match_all('/\d+/', $string, $matches);
print_r($matches[0]);
0 голосов
/ 16 декабря 2010

Можно использовать preg_split и array_merge (PHP 4, PHP 5)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...