【问题标题】:having multiple keys in one key of an array php在数组php的一个键中有多个键
【发布时间】: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))。这可以说明为什么有时使用正确的代码比尝试使用其他代码容易得多。

标签: php arrays json key


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多