当前位置: 首页 > 知识库问答 >
问题:

如何在php中从文本文件创建数组内部数组

荆钱明
2023-03-14

首先,我有一个文本文件

Samsung|us|new
iPhone|china|new

我想转换文本文件,结果必须是这样的

[
    [
        'Samsung', 'us', 'new'
    ],
    [
        'iPhone', 'china', 'new'
    ]
]

我已经尝试过了,但是代码只返回了一个数组

代码:

<?php
$a = file_get_contents("text.txt");
$b = explode('|', $a);

结果:

[
    'Samsung','us','new','iPhone','china','new'
];

共有3个答案

孙子民
2023-03-14

不要使用file_get_contents打开文件并逐行读取文件。然后分线。

https://www.php.net/manual/en/function.fgets.php

这里有一些这样做的例子。您可以为此使用fgets。使用file_get_contents可以获得整个文件。

另一种解决方案是按\r\n\n拆分新行的字符。然后是单行,你可以用分隔符拆分它们。但是在这种情况下,您将整个内容写入一个数组中,这可能会导致一些内存问题。

explode("\n",$homepage)
韦胜泫
2023-03-14

根据Jeto的提示,我将执行以下操作:

首先,使用带有file_ignore_new_lines标志的函数file()读取文件。这将逐行读取文件并创建数组。下一步是迭代每个元素,并用explode()按字符拆分。

这可能是结果代码:

$file = file('test.txt', FILE_IGNORE_NEW_LINES);
for($i = 0; $i < count($file); $i++)
{
    $file[$i] = explode('|', $file[$i]);
}
太叔富
2023-03-14

这是因为file_get_contents()读取整个文件,包括换行符。您必须首先在\n爆炸()。之后,上爆炸()

或者在一行中使用array_map():

$a = file_get_contents("text.txt");
$b = array_map(fn($line) => explode('|', $line), explode("\n", $a));
                                                                // $a with \n
                                                 // this explode splits the lines
                            // this explodes at the | character

示例:https://3v4L.org/24qla

如果您想要读取一些大文件,可以使用以下内容:

function getCsvData($file, $delimiter = '|') {
    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
            yield $data;
        }
        fclose($handle);
    }
}

foreach(getCsvData('test.txt') as $row) {
  print_r($row);
}
 类似资料:
  • 问题内容: 有人可以提供使用fgetcsv从CSV文件创建数组的代码吗? 我使用以下代码从一个简单的CSV文件创建一个数组,但是当我的一个字段包含多个逗号(例如地址)时,该方法将无法正常工作。 *此外,我的托管服务不支持str_getcsv。 上面的代码不适用于以下CSV文件示例。第一栏是姓名,第二栏是地址,第三栏是婚姻状况。 问题答案: 就像您在标题中所说的那样,fgetcsv是必经之路。它很容

  • 问题内容: 我有一个像这样的文本文件: 我想要一个像这样的字符串数组: 我试过了 : 任何人都可以帮助我…。所有答案将不胜感激… 问题答案: 根据您的输入,您就快到了。您错过了循环中保持从文件读取每一行的关键点。由于您不事先知道文件中的总行数,因此请使用集合(动态分配的大小)来获取所有内容,然后将其转换为的数组(这是您想要的输出)。 像这样: 那么输出()将是: 这不是最佳解决方案。其他更 聪明的

  • 问题内容: 所以-我有一个需要a 作为输入的第三方库。我有一个。 我不想将字节写入磁盘..我想将其保留在内存中。我如何从提供的内容创建一个想法(无需写入磁盘)? 问题答案: 抱歉,不可能。除非您具有RAM磁盘,否则File本质上是磁盘上的实体-但这不是您可以用Java创建的东西。 这正是API不应该基于File对象(或过载以接受InputStream)的原因。

  • 我对python和pandas很陌生,所以你能帮我回答这个看似简单的问题吗?我已经有一个包含我的数据的excel文件,现在我想用Python创建一个包含那些数据的数组。例如,我在excel中有如下所示的数据: 我想从这些数据中创建一个矩阵,其形式如下python代码所示: 实际上,我的数据要长得多,所以有没有什么方法可以让我利用pandas将我的excel文件中的数据放入python中的矩阵中,类

  • 所以我看了几个解决方案,但没有一个对我有效。感谢一些人,我最终得到了无限循环,但它仍然对我不起作用。我想将文件“output.txt”读入对象列表。所以我提供了剩下的代码,因为我认为它们不会有任何帮助... 错误消息如下: java.io.StreamCreptedException:无效的流头:3134313b,位于java.io.objectinPutStream.ReadStreamHead

  • 问题内容: 我有一个名为“ clients”的Sqlite 3和/或MySQL表。 使用python 2.6,如何创建带有标题的名为Clients100914.csv的csv文件?excel方言… Sql execute:select *仅提供表数据,但是我想要带有标题的完整表。 如何创建记录集以获取表头。表头应该直接来自不是用python编写的sql。 这段代码使我无法打开文件,也没有标题。也无

  • 我有这个数组,其中的每个索引都包含一个对象文本。所有的对象文本都具有相同的属性。对于给定的属性,一些对象文本具有相同的值,我想创建一个只包含这些对象文本的新数组。 我的想法是对数组进行排序,并将其切成一个新的数组... 以下是数组: 所以,我想创建一个新的数组,只包含那些属性为“United States”的对象。这是我到目前为止疯狂的想法,不管用:

  • 问题内容: 我是一个新手程序员,我搜索了很多有关我的问题的内容,但是找不到关于此的有用的解决方案或教程。 我的目标是我有一个PHP数组,并且数组元素显示在页面上的列表中。 我想添加一个选项,以便用户如果需要,他/她可以创建带有数组元素的CSV文件并下载。 我不知道该怎么做。我也搜索了很多。但尚未找到任何有用的资源。 请为我提供一些教程或解决方案或建议以自己实施。由于我是新手,请提供易于实施的解决方