尝试按空格分割字符串中的单词以成为数组中的元素

时间:2013-06-18 16:30:51

标签: php string

我试图通过将带有空格(“”)的字符串拆分为分隔符,将字符串中的单词转换为数组中的元素。

我正在尝试使用explode,但在我var_dump()之后爆炸的数组应该生成,我看到结果是一个数组,但是有很奇怪的值。

这是我的代码:

/*

var_dump() of $matches is array(1) { [0]=> array(5) { [0]=> string(72) "business bossiness busyness bushiness fussiness" [1]=> string(1) "0" [2]=> string(1) "9" [3]=> string(1) "1" [4]=> string(47) "business bossiness busyness bushiness fussiness" } }

*/
$suggestionsString = $matches[0][0];
$suggestionsArray = explode(" ", $suggestionsString);
var_dump($suggestionsArray);

但是我从var_dump()获得的输出如下:

array(1) {
  [0]=>
  array(5) {
      [0]=>
       string(72) "<c o="0" l="9" s="1">business    bossiness   busyness    bushiness   fussiness</c>"
[1]=>
string(1) "0"
[2]=>
string(1) "9"
[3]=>
string(1) "1"
[4]=>
string(47) "business    bossiness   busyness    bushiness   fussiness"
  }
}

为什么我得到这个输出?我如何分割字符串中的单词,以便每个单词都是数组中的单词?

我想要的只是阵列中的那5个单词。

4 个答案:

答案 0 :(得分:2)

一旦我们完整地看到原始输入数组$matches,您的问题变得更加清晰,并且它源于尝试使用Web浏览器通过var_dump()进行调试而不是直接查看输出PHP发送(在页面源中可见)。

您的输入数组$matches看起来是preg_match()调用的结果,并包含HTML或XML标记。 (希望您没有尝试通过正则表达式处理XML - 更好地使用正确的XML解析库)

// Input array ($matches)
array(1) {
  [0]=>
  array(5) {
      [0]=>
        string(72) "<c o="0" l="9" s="1">business    bossiness   busyness    bushiness   fussiness</c>"
      [1]=>
        string(1) "0"
      [2]=>
        string(1) "9"
      [3]=>
       string(1) "1"
      [4]=>
       string(47) "business    bossiness   busyness    bushiness   fussiness"
  }
}

preg_match()返回的第一个数组元素是完全匹配的字符串,来自()捕获组的内部匹配,这是您最初尝试匹配的内容。相反,您需要的值是$matches[0][4],其中包含正确的内部匹配。

由于您的单词列表由多个空格字符而不是单个空格分隔,因此您无法使用explode()。相反,您需要使用preg_split()表达式\s+来匹配一个或多个空白字符:

$suggestionsString = $matches[0][4]; // string(47) "business    bossiness   busyness    bushiness   fussiness"
$suggestionsArray = preg_split('/\s+/', $suggestionsString);
var_dump($suggestionsArray);

// Prints:
array(5) {
  [0] =>
  string(8) "business"
  [1] =>
  string(9) "bossiness"
  [2] =>
  string(8) "busyness"
  [3] =>
  string(9) "bushiness"
  [4] =>
  string(9) "fussiness"
}

答案 1 :(得分:0)

当我运行以下脚本时:

<?php
$suggestionsString = "business bossiness busyness bushiness fussiness";
$suggestionsArray = explode(" ", $suggestionsString);
var_dump($suggestionsArray);
?>

我得到了

array(5) {
  [0]=>
  string(8) "business"
  [1]=>
  string(9) "bossiness"
  [2]=>
  string(8) "busyness"
  [3]=>
  string(9) "bushiness"
  [4]=>
  string(9) "fussiness"
}

完全符合预期。不知怎的,你没有做你认为你在做的事情......

答案 2 :(得分:0)

除非帖子是对您代码的误传,否则您发布的内容无法真正发生

继续这笔交易 -

<?php 
$suggestionsString = "business bossiness busyness bushiness fussiness";
$suggestionsArray = explode(" ", $suggestionsString);
var_dump($suggestionsArray);
?>

我按原样运行(无需修改) RESULT

array(5){[0] =&gt; string(8)“business”[1] =&gt; string(9)“bossiness”[2] =&gt; string(8)“busyness”[3] =&gt; string(9)“bushiness”[4] =&gt; string(9)“fussiness”}

[]标签表示要返回的数组的索引。

array(4){[0] =&gt; string(2)“string(5)”o =“0”“[2] =&gt; string(5)”l =“9”“[3] =&gt; string(57)”s =“1”&gt; ;商业专横忙碌忙碌“}

您的数组表明有4个索引可用但您的结果只显示[0] [2] [3] ??? [1]

你写的作品

不确定为什么你会得到这个破损的转储...

答案 3 :(得分:-1)

如果您只想要值而不是有关值的信息,请使用print_r而不是var_dump。