我试图回复一个简单的json_encoded文件。
<?php
$allMessages = file_get_contents("chatmessages.txt");
$allMessagesArr = explode(PHP_EOL, $allMessages);
$newObj = [];
var_dump($allMessagesArr);
foreach ($allMessagesArr as $thisLine) {
// echo($thisLine . "\n");
if (empty($thisLine) ) {
} else {
$thisLineArr = explode("|", $thisLine);
$newObj[trim($thisLineArr[0])] = trim($thisLineArr[1]);
// echo("here comes another one ".$thisLineArr[0] . " : ". $thisLineArr[1]."\n");
}
}
$newObjForFront = json_encode($newObj);
echo($newObjForFront);
chatmessages.txt看起来像这样
bob|hello
jimmy|second try incoming again
sam|third try
bob|oh damn
我已经回显了循环中的每一行,并出现了第四个元素。但是,当我回复$ newObjForFront时,它错过了最后一个元素。有什么想法吗?
答案 0 :(得分:2)
在
中创建最终数组$newObj
时
$newObj[trim($thisLineArr[0])] = trim($thisLineArr[1]);
您使用名称作为数组的索引。由于数组索引必须是唯一的,这意味着实际上最后一个条目会覆盖第一个条目,因此您的实际输出是......
{"bob":"oh damn","jimmy":"second try incoming again","sam":"third try"}
所以它实际上是第一条缺失的消息。
修改强>
如果您想拥有所有消息,则可以使用
存储它们$newObj[] = [ "user"=> trim($thisLineArr[0]), "msg" =>trim($thisLineArr[1])];
哪个会输出为...
[{"user":"bob","msg":"hello"},{"user":"jimmy","msg":"second try incoming again"},{"user":"sam","msg":"third try"},{"user":"bob","msg":"oh damn"}]
答案 1 :(得分:0)
$newObj[trim($thisLineArr[0])] = trim($thisLineArr[1]);
此行将使用任何用户名的最后一条消息替换值。如果任何用户名有多条消息,则只有最后一条消息将存储在数组中。
通过创建多维,您可以使用相同的用户名存储多条消息。检查以下可能对您有帮助的代码
$newObj[][trim($thisLineArr[0])] = trim($thisLineArr[1]);