0

我试图将字符串中的单词转换为数组中的元素,方法是用空格(“”)作为分隔符分割字符串。

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

这是我的代码:

/*

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

4 回答 4

2

一旦我们完整地看到了原始输入数组$matches,就会更清楚您的问题是什么,它源于尝试var_dump()使用 Web 浏览器进行调试,而不是查看 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"
}
于 2013-06-18T17:32:47.630 回答
0

除非该帖子是对您的代码的歪曲,否则您发布的内容不可能真正发生

这是交易——

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

我按原样运行(没有修改)结果

数组(5){[0]=>字符串(8)“业务”[1]=>字符串(9)“老板”[2]=>字符串(8)“忙碌”[3]=>字符串(9) “杂乱无章”[4]=> 字符串(9)“繁琐”}

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

数组(4) { [0]=> 字符串(2) " 字符串(5) "o="0"" [2]=> 字符串(5) "l="9"" [3]=> 字符串(57 ) "s="1">业务专横忙忙忙忙碌碌" }

您的数组指出有 4 个索引可用,但您的结果仅显示 [0] [2] [3] ??? 在哪里 [1]

你写的有效

不知道为什么你会得到这个破碎的转储......

于 2013-06-18T17:01:17.380 回答
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"
}

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

于 2013-06-18T16:37:07.420 回答
-1

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

于 2013-06-18T16:33:58.060 回答