【发布时间】:2020-08-04 06:36:38
【问题描述】:
我想在一个数组的一个键中有多个键。我尝试了以下语法:
<?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"}]
它只有最后一个元素。
【问题讨论】:
-
您将
$str[1] == "today"与$str = 'name'.$i;进行比较,它会尝试将a与今天/明天进行比较,您可能打算使用$date。也不知道为什么你设置$date然后再做一个if- 为什么不在一组语句中做呢? -
@NigelRen 是的,我纠正了这一点,实际上我正在从文件中读取。我把代码转换成了这个。
-
当您更新代码时,我已经尝试过并在输出中获得了 3 个元素。
-
@NigelRen 我添加了实际代码。你能看看吗。
-
fgets()将包含输入中的新行 - 使用trim(fgets($txt_file))。这可以说明为什么有时使用正确的代码比尝试使用其他代码容易得多。