为什么这个 json_encoded 字符串不返回第四个元素?

VK1

我正在尝试回显一个简单的 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 时,它缺少最后一个元素。任何想法为什么?

Nigel Ren

当您$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"}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章