我有一个.txt文件,如下所示:
Test = 10849831 = August 6, 2013:
56cake = 0 = August 6, 2013:
Wwe = 812986192 = August 6, 2013:
Test = 346192 = August 9, 2013:
然后,我使用以下PHP代码......
$Output = array();
$Lines = explode(":", $txt);
foreach($Lines as $line) {
$Rows = array_map('trim', explode(" = ", $line));
if(!isset($Rows[0], $Rows[1], $Rows[2])) continue;
$Output[$Rows[0]] = array($Rows[1], $Rows[2]);
}
print_r($Output);
...将.txt文件转换为如下所示的多维数组:
Array
(
[Test] => Array
(
[0] => 346192
[1] => August 9, 2013
)
[56cake] => Array
(
[0] => 0
[1] => August 6, 2013
)
[Wwe] => Array
(
[0] => 812986192
[1] => August 6, 2013
)
)
但是,有一个很大的错误。该代码删除所有重复的数据值。在我的示例txt文件中,我有 TWO 值,名称为“Test”,但代码只在多维数组中输出 ONE 。
您还可以注意到代码如何将第一个“Test”元素(在多维数组中)的数据替换为最新的(.txt文件中的最后一行)。
数组中第一个“Test”元素的数据 DOES NOT 甚至与.txt文件Test = 10849831 = August 6, 2013:
的第一行中的数据匹配。
如何解决此问题?我希望多维数组看起来像这样:
Array
(
[Test] => Array
(
[0] => 10849831
[1] => August 6, 2013
)
[56cake] => Array
(
[0] => 0
[1] => August 6, 2013
)
[Wwe] => Array
(
[0] => 812986192
[1] => August 6, 2013
)
[Test] => Array
(
[0] => 346192
[1] => August 9, 2013
)
)
答案 0 :(得分:1)
您不能在数组中使用相同的键两次。就是这样。
因此,当您添加“新”条目时,旧值将被覆盖。
示例:
$data = array("test" => "Content 1");
$data["test"] = "Content 2";
echo "<pre>" . print_r($data,1) . "</pre>";
//Will give you:
[test] => "Content 2"
答案 1 :(得分:1)
foreach($Lines as $line) {
$Rows = array_map('trim', explode(" = ", $line));
if(!isset($Rows[0], $Rows[1], $Rows[2])) continue;
$Output[] = array('type'=>$Rows[0],'id'=>$Rows[1],'date'=> $Rows[2]);
}
类型,ID,日期;在哪里我的猜测
答案 2 :(得分:0)
正如其他人所指出的那样,您的代码无法提供所需的结果,因为数组不能包含相同的键,因此您的数据将被覆盖。 Dagon的答案存储了所有重复项,但是丢失了使用输入文件每行的第一个元素进行键查找的能力。
保留按键查找功能的替代方法是:
foreach($Lines as $line) {
$Rows = array_map('trim', explode(" = ", $line));
if(!isset($Rows[0], $Rows[1], $Rows[2])) continue;
if (array_key_exists($Rows[0], $Output))
$Output[$Rows[0]][] = array($Rows[1], $Rows[2]);
else
$Output[$Rows[0]] = array(array($Rows[1], $Rows[2]));
}
$ Output中的每个键都不是直接保存每行中的数据,而是保存一个数组,每个行都有一个元素,文本文件中包含该键。使用示例数据,生成的数组将如下所示:
Array
(
[Test] => Array
(
[0] => Array
(
[0] => 10849831
[1] => August 6, 2013
)
[1] => Array
(
[0] => 346192
[1] => August 9, 2013
)
)
[56cake] => Array
(
[0] => Array
(
[0] => 0
[1] => August 6, 2013
)
)
[Wwe] => Array
(
[0] => Array
(
[0] => 812986192
[1] => August 6, 2013
)
)
)