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

如何在php中从文本文件创建数组内部数组,php,arrays,file,Php,Arrays,File,首先,我有一个文本文件 Samsung|us|new iPhone|china|new 我想转换文本文件,结果必须是这样 [ [ 'Samsung', 'us', 'new' ], [ 'iPhone', 'china', 'new' ] ] 我已经尝试过了,但是代码只返回一个数组 代码: 不要使用文件获取内容打开文件并逐行读取文件。然后把线分开 下面是一些这样做的例子。您可以为此使用fgets。使用file\u获取内容可以获

首先,我有一个文本文件

Samsung|us|new
iPhone|china|new
我想转换文本文件,结果必须是这样

[
    [
        'Samsung', 'us', 'new'
    ],
    [
        'iPhone', 'china', 'new'
    ]
]
我已经尝试过了,但是代码只返回一个数组

代码:


不要使用
文件获取内容
打开文件并逐行读取文件。然后把线分开

下面是一些这样做的例子。您可以为此使用
fgets
。使用
file\u获取内容
可以获取整个文件

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

explode("\n",$homepage)

这是因为
file\u get\u contents()
读取整个文件,包括换行符。 您必须首先在
\n
上进行
分解()。然后在
|
上分解()

或者在一行中使用
array\u 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
例如:

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

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);
}

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

首先,使用带有标志
file\u IGNORE\u NEW\u line的函数读取文件
。这将逐行读取文件并创建一个数组。 下一步是迭代每个元素,并用
|
字符分割

这可能是生成的代码:

$file = file('test.txt', FILE_IGNORE_NEW_LINES);
for($i = 0; $i < count($file); $i++)
{
    $file[$i] = explode('|', $file[$i]);
}
$file=file('test.txt',file\u IGNORE\u NEW\u行);
对于($i=0;$i
查看(如果您的文件不是太大)。
文件()
基本上与
文件获取内容()
+手动行拆分相同。
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);
}
$file = file('test.txt', FILE_IGNORE_NEW_LINES);
for($i = 0; $i < count($file); $i++)
{
    $file[$i] = explode('|', $file[$i]);
}