explode()函数不能按空格分隔字符串吗?

3

我正试图打开一个文本文件,并将其中的姓名列表分隔成一个数组,但是当我使用var_dump查看新数组时,我得到了这个结果:

array(1) { [0]=> string(61) "name name name name " }

整个名单的内容都放在了数组的一个键字段中。

这是我正在使用的代码:

$ingame_list = file_get_contents('../../../../home/folder/folder/list.txt');
$newarray = explode(" ", $ingame_list);
var_dump($newarray);

如何让每个名称都在新数组中拥有自己的键字段?


很难在没有看到文本文件的情况下说出来。 - hek2mgl
你是否曾经考虑过使用专门为结构化数据设计的格式,例如JSON、XML、YAML? - CodeZombie
2个回答

10

简而言之:你的列表是用除了简单空格以外的其他东西分隔的——很可能是多个相邻的空格字符。实际上,你看到的是数据的HTML渲染结果,在这个结果中,多个相邻的空格字符会显示为一个空格。

请注意var_dump()结果中的string(61)var_dump()会报告变量的类型、长度和内容(在字符串的情况下)。这里的string(61)表示你的字符串中有61个字符。因此,如果你真的得到了字符串"name name name name ",那么这意味着你没有看到的字符存在。这可能是由于空格在HTML中的显示方式导致的:制表符、换行符和其他空格字符都看起来像简单的空格。你确定文本是由空格而不是制表符或其他空格字符分隔的吗?

explode()只会根据指定的字符/字符串精确地拆分字符串。如果文本是由\t\n\r或其他不可打印字符分隔的,则你的explode()语句将无法正常工作。例如,如果你有以下内容:

name    name    name

(假装这些是制表符字符),那么你的explode()函数找不到任何普通空格(,字符值为32)。

如何解决

根据您下面的评论,您的数据包含换行符(\n),而不是普通空格。您需要将代码的第二行替换为以下内容:

$newarray = explode("\n", $ingame_list);

在列表中,它们通过换行符分隔! - crmepham
2
好的,就这样吧! :) - elixenide
1
@crm的换行符不是" "。请尝试使用"\n" - Popnoodles
@crm:更简单的方法,不需要使用 explode()。file() - AbraCadaver

2

如果它们被换行符分隔,那么您甚至不需要使用explode函数:

$newarray = file('../../../../home/folder/folder/list.txt');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接