php explode()函数问题 - 空格

时间:2012-04-17 18:19:05

标签: php explode

我希望将文本字符串拆分为由空格分隔的单词。 我用

$words=explode(" ", $text);

不幸的是,这种方法对我来说效果不好,因为我想知道它们之间有多少个空格。

有没有更好的方法来做到这一点,而不是通过整个$ text,逐个符号,使用while语句用整数填充$ space($spaces=array();)(空格数,in大多数情况下它是1)并将文本读入$ words = array()逐个符号?

这是一个额外的解释。

$text="Hello_world_____123"; //symbol "_" actually means a space

需要:

$words=("Hello","world","123");
$spaces=(1,5);

3 个答案:

答案 0 :(得分:2)

改为使用正则表达式:

$words = preg_split('/\s+/', $text)

修改

$spaces = array();
$results = preg_split('/[^\s]+/', $text);
foreach ($results as $result) {
  if (strlen($result) > 0) {
     $spaces [] = strlen($result);
  }
}

答案 1 :(得分:1)

有很多方法可以做你想做的事情,但我可能会选择preg_split()array_map()的组合:

$text = 'Hello world     123';
$words = preg_split('/\s+/', $text, NULL, PREG_SPLIT_NO_EMPTY);
$spaces = array_map(function ($sp) {
    return strlen($sp);
}, preg_split('/\S+/', $text, NULL, PREG_SPLIT_NO_EMPTY));

var_dump($words, $spaces);

输出:

array(3) {
  [0]=>
  string(5) "Hello"
  [1]=>
  string(5) "world"
  [2]=>
  string(3) "123"
}
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(5)
}

答案 2 :(得分:0)

你仍然可以得到两者之间的空格数:

$words = explode(" ", $text);
$spaces = sizeof($words)-1;

这不适合你吗?