【问题标题】:Multi-Line String to an Array多行字符串到数组
【发布时间】:2015-12-29 03:00:24
【问题描述】:

我有一个这样的列表(作为一个字符串,比如 $peoplelist):

Name1
Name2
Name3

我想要做的是将整个字符串分成单独的元素(其中每一行对应一个新元素 // 即元素 1 是“Name1”,元素 2 是“Name2”等)并放置它们放入一个数组中(本质上,使用换行符作为分隔符并将该字符串拆分为单独的元素,以放入唯一索引下的数组中)。

这是我目前所拥有的:

# Step 1 - Fetch the list
$peoplelist = file_get_contents('http://domain.tld/file-path/')
//The Contents of $peoplelist is stated at the top of this question.
//(The list of names in blue)

# Step 2 - Split the List, and put into an array
$arrayX = preg_split("/[\r\n]+/", $playerlist);
var_dump($arrayX);

现在,使用上面提到的代码,这是我得到的(输出):

array(1) { [0]=> string(71) "Name1
Name2
Name3
" }

根据我的输出,(据我了解)整个字符串(步骤 1 中的列表)被放入单个索引下的数组中,这意味着第二步没有有效地按照我的意图进行去做。

我的问题是,如何将列表拆分为单独的元素(原始列表中的每一行都是唯一元素)并将这些元素放入数组中?

编辑: 感谢大家的帮助!并感谢 localheinz 的解决方案 :)

注意:如果将来有人阅读此内容,请确保您的列表源文件包含原始数据 - 我的错误是使用包含 html 标记的扩展名为 .php 的文件 - 此 html脚本干扰了索引过程。

【问题讨论】:

  • "/\r\n|\n|\r/" 应该是"/[\r\n]+/"
  • 感谢 Lashane 的更正 :)

标签: php arrays string


【解决方案1】:

使用file():

$arrayX = file(
    'http://domain.tld/file-path/',
    FILE_IGNORE_NEW_LINES
);

参考见:

【讨论】:

  • 这是最好的答案(到目前为止)
  • 感谢 localheinz 的回答 - 我会尝试一下,然后告诉你进展如何
  • 它似乎对我 localheinz 不起作用 - 输出显示一个空数组。
  • 奇怪,你能提供更多细节吗?
  • 是的!那行得通。输出:array(2) { [0]=> string(5) "Name1" [1]=> string(12) "Name2" } 非常感谢 localheinz 的帮助,也感谢其他人的回答,我很感激!我今天学到了很多。 :)
【解决方案2】:

您可以在 PHP 中使用explode()。请参阅下面使用分隔符 \n 拆分字符串的代码:

explode("\n", $string);

【讨论】:

  • 我不完全确定,但对于 Windows,对于某些特定情况,换行符分隔符是 \r\n
  • 分隔符不是问题
  • 嘿,Ceeee - 感谢您的回答,但这似乎对我不起作用。我得到相同的输出
【解决方案3】:

试试看。

<?php

$peoplelist = file_get_contents('text.txt');
$arrayX[0] = $peoplelist;
echo "<pre>";
var_dump($arrayX);

?>

=> 输出

  array(1) {
  [0]=>
  string(19) "Name1
   Name2
   Name3"
 }

【讨论】:

  • 嗨 Mukesh,感谢您的回复。该脚本在单个索引下添加了所有名称 - 有没有办法将 [0]=> Name1、[1]=> Name2 等分开?
  • 我可能误解了一些东西...如果我是,请告诉我!我假设 [0]、[1] 和一组括号内的任何数字指的是索引号......我正确吗?另外,string(int) 是什么意思?再次感谢:)
  • 刚刚发现整数是指条目中的字符数。看起来我的 .php 源文件中的 html 正在干扰索引过程。你知道一种将列表输出为只有换行符的原始格式的方法吗?提前致谢!
【解决方案4】:

使用explode 和分隔符PHP_EOL 用于跨平台。

$str = "Name1
Name2
Name3";

var_dump(explode(PHP_EOL,$str));

将导致

array(3) {
  [0]=>
  string(5) "Name1"
  [1]=>
  string(5) "Name2"
  [2]=>
  string(5) "Name3"
}

【讨论】:

  • 请注意 PHP_EOL 有利于服务器端,而不是处理用户输入。它可能对他有用,可能不会。
  • 嘿 roullie - 感谢您的回答。但是,当我尝试它时,它似乎不起作用。输出:array(1) { [0]=> string(52) "Name1 Name2 Name3" }
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2016-10-31
  • 2017-07-08
  • 2014-07-16
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多