【问题标题】:explode() doesn't separate a string by spaces?explode() 不会用空格分隔字符串吗?
【发布时间】:2013-12-24 05:10:40
【问题描述】:

我正在尝试打开一个文本文件并将其中的名称列表分解为一个数组,但是当我 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);

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

【问题讨论】:

  • 不看文本文件很难说
  • 有没有想过使用专门为 JSON、XML、YAML 等结构化数据设计的格式?

标签: php arrays file-get-contents explode


【解决方案1】:

tl;dr 您的列表由非简单空格分隔 - 很可能是多个相邻的空白字符。您实际上看到的是数据的 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)字符。

如何解决这个问题

根据您下面的 cmets,您的数据包含换行符 (\n) 字符,而不是纯空格。您需要将代码的第二行替换为:

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

【讨论】:

  • 在列表中它们由换行符分隔!
  • 好吧,给你! :)
  • @crm 换行符不是" "。试试"\n"
  • @crm:更简单,不需要爆炸。 file()
【解决方案2】:

如果它们用换行符分隔,那么你甚至不需要爆炸:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多