代码之家  ›  专栏  ›  技术社区  ›  VK1

为什么这个json\U编码的字符串不返回第四个元素?

  •  0
  • VK1  · 技术社区  · 7 年前

    我试图回显一个简单的json\u编码文件。

    <?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);
    

    聊天信息。txt如下所示

    bob|hello
    jimmy|second try incoming again
    sam|third try
    
    bob|oh damn
    

    我重复了循环中的每一行,出现了第四个元素。然而,当我回显$newObjForFront时,它缺少最后一个元素。知道为什么吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nigel Ren    7 年前

    创建最终阵列时 $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"}]
    
        2
  •  0
  •   Pankaj Makwana itbirds    7 年前

    $newObj[trim($thisLineArr[0])] = trim($thisLineArr[1]); 此行将用任何用户名的最后一条消息替换值。如果任何用户名有多条消息,则阵列中只存储最后一条消息。

    通过创建多维,您可以使用相同的用户名存储多条消息。检查以下代码可能会对您有所帮助

    $newObj[][trim($thisLineArr[0])] = trim($thisLineArr[1]);