我试图通过将带有空格(“”)的字符串拆分为分隔符,将字符串中的单词转换为数组中的元素。
我正在尝试使用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个单词。
答案 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。