我一直在努力解决这个问题,但我只是大脑冻结了。我有一个包含多行的文件,每行由“=”分隔成单独的数据:// Example file. Syntax: <key>=<Value>key1=value1key1=value2key1=value3key2=value1key2=value2key3=value1key3=value2key3=value3key3=value4我需要将这个文件分解成单独的行,并将它们全部放入一个数组中,这样 key1 包含一个 value1、2、3 的数组,key2 有它的值,key3 有它的值,依此类推。有点像这样:Array( [key1] => Array ( [0] => value1 [1] => value2 [2] => value3 ) [key2] => Array ( [0] => value1 [1] => value2 ) [key3] => Array ( [0] => value1 [1] => value2 [2] => value3 [3] => value4 ))到目前为止,我有以下代码:$loadFile = file('file.txt');$returnArray = array();foreach ($loadFile as $line) { $startWith = substr(trim($line), 0, 2); if (empty($line) || $startWith == '//') { continue; } list($key, $value) = explode('=', $line); $returnArray[$key] = $value;}return $returnArray;然而,我得到的只是:Array ( [key1] => value3 [key2] => value2 [key3] => value4 )我也试过$loadFile = file('file.txt');$returnArray = array();foreach ($loadFile as $line) { $startWith = substr(trim($line), 0, 2); if (empty($line) || $startWith == '//') { continue; } $exp = explode('=', $line); $returnArray[$exp[0]] = $exp[1];}return $returnArray;这也给了我同样的结果。我还尝试了一个 array_merge,它只是将所有内容都推入一个以数值为键的数组中。
3 回答
SMILET
TA贡献1796条经验 获得超4个赞
我认为您的问题是您覆盖了密钥的值。
$returnArray[$key] = $value;
所以你想要的是将你的值附加到一个以$key
为父级的子数组。
$returnArray[$key][] = $value;
随着[]
你追加$value
到底层数组。
函数式编程
TA贡献1807条经验 获得超9个赞
为了好玩,只需将它们转换为ini文件的数组语法并解析它:
$result = parse_ini_string(str_replace('=', '[]=', file_get_contents('file.txt')));
更有趣的是,把它们变成一个查询字符串并解析它:
parse_str(str_replace('=', '[]=', implode('&', file('file.txt'))), $result);
两者都产生:
Array
(
[key1] => Array
(
[0] => value1
[1] => value2
[2] => value3
)
[key2] => Array
(
[0] => value1
[1] => value2
)
[key3] => Array
(
[0] => value1
[1] => value2
[2] => value3
[3] => value4
)
)
- 3 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消