php - 将数据从文本文件复制到 php 数组
问题描述
我有一个文本平面文件data.txt
,其中包含这种特定格式的数据,并且始终相同:
id: 24153
firstname: john
lastname: smith
registered: true
id: 27663
firstname: ben
lastname: jackson
registered: false
如何读取文本文件并遍历所有数据点以创建一个数组,其中所有数据按以下方式排列:
Array
(
[0] => Array
(
[id] => 24153
[firstname] => john
[lastname] => smith
[registered] => 1
)
[1] => Array
(
[id] => 27663
[firstname] => ben
[lastname] => jackson
[registered] =>
)
)
我不完整/失败的尝试。我可以将它们全部放入一个数组中,但不确定如何按照描述的方式对其进行格式化。
$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr = array();
foreach ($lines as $line_num => $line) {
if (strpos($line, 'id') !== false) {
$arr[$line] = //not sure how to move forward from here
}
}
解决方案
选项 1:如果id
始终是组的第一行,您可以只使用 1 个循环来执行更简单的方法。
使用array_values
会将关联数组转换为简单数组。
$fh = fopen('newfile.txt','r');
$result = array();
while ($line = fgets($fh)) {
$line = trim($line);
if ( $line !== '' ) {
$line = explode(":", $line, 2);
if ( trim( $line[0] ) === 'id' ) $id = trim( $line[1] );
$result[$id][trim( $line[0] )] = trim( $line[1] );
}
}
fclose($fh);
echo "<pre>";
print_r( array_values($result) );
echo "</pre>";
选项 2:您可以使用循环遍历文件的每一行。对数组进行分块。并用于array_reduce
格式化数组。
$fh = fopen('newfile.txt','r'); //Open file
$arr = array();
while ($line = fgets($fh)) { //Loop thru each line
$arr[] = trim($line); //Trim the line and push in array
}
fclose($fh);
$arr = array_chunk( $arr, 4 ); //chunk array in the size of 4
//use array_reduce to format the array Format array
$result = array_reduce($arr, function($c,$v){
$temp = array();
$id = "";
foreach($v as $val) {
$val = explode(":", $val, 2);
$temp[ trim( $val[0] ) ] = trim( $val[1] );
}
$c[$id] = $temp;
return $c;
},array());
echo "<pre>";
print_r( $result );
echo "</pre>";
这将导致:
Array
(
[24153] => Array
(
[firstname] => john
[lastname] => smith
[registered] => true
)
[27663] => Array
(
[firstname] => ben
[lastname] => jackson
[registered] => false
)
)
推荐阅读
- python - How can I find the last non-empty row of excel using openpyxl 3.03?
- python - 在 Python 中读取 .txt 文件,避免使用特殊字符替换文件中的原始字符
- node.js - mongodb:查询日历模型中的空闲时间段
- angular - Angular:有条件地导入模块不适用于 AoT
- excel - Excel VBA 中的“无法设置字体类的大小属性”错误,用于条件格式,工作表不受保护
- matlab - 绘制脉冲函数
- python - 在 python 中绘制数组的问题
- elasticsearch - 尝试更新 elasticsearch 中的嵌套 geoip 位置字段
- c# - 实体框架不生成实体类
- laravel - LARAVEL 获取文件内容并拆分以保存在另一个表中