Почему эта строка json_encoded НЕ возвращает четвертый элемент? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь отобразить простой файл 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, в нем отсутствует последний элемент. Есть идеи почему?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

$newObj[trim($thisLineArr[0])] = trim($thisLineArr[1]); эта строка заменит значение последним сообщением любого имени пользователя. если какое-либо имя пользователя содержит несколько сообщений, в массиве будет храниться только последнее сообщение.

Создав многомерный, вы можете хранить несколько сообщений с одним и тем же именем пользователя. Проверьте ниже код, который может помочь вам

$newObj[][trim($thisLineArr[0])] = trim($thisLineArr[1]);
0 голосов
/ 01 мая 2018

Когда вы создаете ваш окончательный массив $newObj в

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

Вы используете имя в качестве индекса для массива. Поскольку индексы массива должны быть уникальными, это означает, что фактически последняя запись перезаписывает первую, поэтому ваш фактический вывод ...

{"bob":"oh damn","jimmy":"second try incoming again","sam":"third try"}

Так что это фактически первое сообщение, которое отсутствует.

Edit:

Если вы хотите просто получить все сообщения, вы можете сохранить их, используя

$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"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...