Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php数组的一个键中有多个键_Php_Arrays_Json_Key - Fatal编程技术网

在php数组的一个键中有多个键

在php数组的一个键中有多个键,php,arrays,json,key,Php,Arrays,Json,Key,我想在一个数组的一个键中有多个键。我尝试了以下语法: <?php for($i = 0 ; $i < 3 ; $i++){ $str = 'name'.$i; if ($i == 0){ $date = 'today'; } elseif ($i == 1){ $date = 'yesterday'; } else{ $date = 'tomorrow'; } if ($d

我想在一个数组的一个键中有多个键。我尝试了以下语法:

<?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);
我不知道发生了什么事。谢谢你的帮助

更新: 我分享这个,因为上面的代码显然没有显示我的问题。这是实际代码:

<?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);
最后一个INFO.json文件是:

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

它只有最后一个元素。

读取文件时,
fgets()
将包含输入中的新行,因此在尝试将其与文本进行比较时,会有一个尾随的新行。使用
trim()
删除任何额外字符

$str = explode(':', trim(fgets($txt_file)));

$str[1]==“今天”
$str='name'.$i
它将尝试将
a
与今天/明天进行比较,您可能打算使用
$date
。也不知道为什么要设置
$date
,然后在
的情况下执行另一个
-为什么不在一组语句中执行此操作?@NigelRen是的,我纠正了这一点,实际上是在从文件中读取。我将代码转换成这样。当您更新代码时,我尝试了它,并在输出中获得了3个元素。@NigelRen我添加了实际的代码。请看一看。
fgets()
将包含输入中的新行-使用
trim(fgets($txt_文件))
。这可以说明为什么有时使用正确的代码比尝试使用其他代码容易得多。
[{"user":"quera4","time":"2005-10-03"}]
$str = explode(':', trim(fgets($txt_file)));