наличие нескольких ключей в одном ключе массива php - PullRequest
0 голосов
/ 04 августа 2020

Я хочу иметь несколько ключей в одном ключе массива. Я пробовал использовать следующий синтаксис:

<?php
for($i = 0 ; $i < 3 ; $i++){
    $str = 'name'.$i;
    if ($i == 0){
        $date = 'today';
    }
    elseif ($i == 1){
        $date = 'yesterday';
    }
    else{
        $date = 'tomorrow';
    }
    if ($date == "yesterday"){
        $arr[] = ["user" => $str, "time" => '2020-10-2'];
    }
    elseif ($date == "today"){
        $arr[] = ["user" => $str, "time" => '2020-10-3'];
    }
    elseif ($date == "tomorrow"){
        $arr[] = ["user" => $str, "time" => '2020-10-4'];
    }
}
print_r($arr);

, но кажется, что в результирующем массиве всего один элемент.

Array
(
    [0] => Array
        (
            [user] => name1
            [time] => 2020-10-2
        )

)

Я не знаю, что происходит. помощь приветствуется.

Обновление: Я разделяю это, потому что, по всей видимости, приведенный выше код не показывает мою проблему. Это фактический код:

<?php
$txt_file = fopen('path.txt', 'r');
$date = strtotime(fgets($txt_file));
$arr = [];
for($i = 0 ; !feof($txt_file) ; $i++){
    $str = explode(':', fgets($txt_file));
    if (count($str) != 2){
        continue;
    }
    if ($str[1] == "yesterday"){
        $arr[] = ["user" => $str[0], "time" => date("Y-m-d", $date-3600*24)];
    }
    elseif ($str[1] == "today"){
        $arr[] = ["user" => $str[0], "time" => date("Y-m-d", $date)];
    }
    elseif ($str[1] == "tomorrow"){
        $arr[] = ["user" => $str[0], "time" => date("Y-m-d", $date+3600*24)];
    }
}
file_put_contents("INFO.json", json_encode($arr));
fclose($txt_file);

path.txt содержит:

3 October 2005
quera1:today
quera2:tomorrow
quera3:yesterday
quera4:today

и последний INFO. json файл:

[{"user":"quera4","time":"2005-10-03"}]

it имеет только последний элемент.

1 Ответ

1 голос
/ 04 августа 2020

При чтении файла fgets() будет включать новую строку из ввода, поэтому у вас будет завершающая новая строка при попытке сравнить ее с текстом. Используйте trim(), чтобы удалить лишние символы ...

$str = explode(':', trim(fgets($txt_file)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...