多行字符串转换成数组

4

我有一个列表(作为字符串,称为$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
" }

根据我的输出结果(据我所知),整个字符串(即第一步中的列表)被放到一个数组中的单个索引下,这意味着第二步没有有效地实现我的意图。我的问题是,如何将列表拆分为单独的元素(其中原始列表上的每个单独行都是唯一的元素),并将这些元素放入一个数组中?注意:如果有人在未来阅读此内容,请确保您的列表源文件包含原始数据-我的错误是使用了一个带有.php扩展名的文件,其中包含HTML标记-这个HTML脚本干扰了索引过程。谢谢大家的帮助,感谢localheinz提供的解决方案 :)

1
"/\r\n|\n|\r/" 应该改为 "/[\r\n]+/" - Iłya Bursov
感谢您的纠正,Lashane :) - Ash
4个回答

7

感谢您的回答,localheinz - 我会尝试一下,并让您知道它的效果如何。 - Ash
它对我来说似乎不起作用,localheinz - 输出显示为空数组。 - Ash
奇怪,你能提供更多细节吗? - localheinz
嘿localheinz。这是我得到的输出:array(11) { [0]=> string(6) "" [1]=> string(6) "" [2]=> string(33) "" [3]=> string(7) "" [4]=> string(6) "" [5]=> string(0) "" [6]=> string(41) " " [7]=> string(0) "" [8]=> string(29) “Name1 Name2 " [9]=> string(7) "" [10]=> string(7) "" } 谢谢你的例子,localheinz - 我会尽力弄清楚我做错了什么。我认为这可能是由于我的源文件格式不正确导致的问题。 - Ash
1
是的!这个有效了。 输出: array(2) { [0]=> string(5) "名字1" [1]=> string(12) "名字2" } 非常感谢你的帮助localheinz,也感谢其他所有人的答案,我很感激!我今天学到了很多。 :) - Ash
显示剩余5条评论

4
你可以在 PHP 中使用 explode()。看下面这段代码,它使用分隔符 \n 来拆分字符串:
explode("\n", $string);

我不是完全确定,但对于某些特定情况,Windows的换行符为\r\n - Phiter
1
分隔符不是问题 - Ceeee
嗨Ceeee - 谢谢你的回答,但是对我似乎不起作用。我得到了相同的输出。 - Ash

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等? - Ash
我可能有所误解...如果是这样,请告诉我!我假设[0],[1]和括号内的任何数字都指代索引号...我是正确的吗?另外,string(int)是什么意思?再次感谢 :) - Ash
刚刚弄清楚整数指的是条目中字符的数量。看起来我的 .php 源文件中的 html 影响了索引过程。你知道怎样将列表以纯文本格式输出,只有换行符吗?提前感谢! - Ash

2

使用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"
}

2
请注意,PHP_EOL适用于服务器端,而不适合处理用户输入。它可能适用于某些情况,也可能不适用。 - Itay Moav -Malimovka
嘿,roullie - 感谢你的回答。然而,当我尝试时,它似乎没有起作用。输出:array(1) { [0]=> string(52) "Name1 Name2 Name3 " } - Ash

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