【问题标题】:PHP foreach from array来自数组的PHP foreach
【发布时间】:2021-02-10 04:39:14
【问题描述】:

我正在使用 api 来显示时间列表,但在使用 foreach 时难以显示它们

以下是数据的显示方式:

stdClass Object
(
    [id] => 2507525
    [snapshotTimes] => Array
        (
            [0] => 2020-10-02T04:04:41+00:00
            [1] => 2020-10-03T03:22:29+00:00
            [2] => 2020-10-04T03:06:43+00:00
            [3] => 2020-10-04T21:18:11+00:00
            [4] => 2020-10-06T03:07:12+00:00
            [5] => 2020-10-07T03:21:31+00:00
            [6] => 2020-10-10T03:43:00+00:00
            [7] => 2020-10-17T02:58:49+00:00
            [8] => 2020-10-19T02:57:35+00:00
            [9] => 2020-10-23T03:08:28+00:00
            [10] => 2020-10-26T04:02:51+00:00
            [11] => 2020-10-27T04:33:19+00:00
        )

)

代码:

$domainArray = $services_api->getWithFields("/package/2507525/web/timelineBackup/web");
foreach ($domainArray as $arr) {
    $Time = $arr->$domainArray->snapshotTimes;
    echo " TIME: $Time<br>";
}

但它似乎根本没有回应任何东西?我哪里错了?

【问题讨论】:

  • snapshotTimes 是一个数组,但您将它视为一个字符串。您可能应该运行另一个内部 foreach 以循环遍历 snapshotTimes 中的所有值。检查您的 PHP 错误日志。
  • 也许一个例子可以帮助他@Martin?
  • @Vogal 哦,那就继续吧,如果你坚持的话......请看下面我的例子

标签: php arrays foreach


【解决方案1】:

您的代码显示;

$Time = $arr->$domainArray->snapshotTimes;

在这里,您要访问foreach() 给出的数组上名为domainArray 的属性。无需这样做,因为您已经使用 foreach() 循环数据;

$domainArray = $services_api->getWithFields("/package/2507525/web/timelineBackup/web");

// For each item in the 'snapshotTimes' array
foreach ($domainArray->snapshotTimes ?? [] as $time) {
    echo " TIME: {$time}<br>";
}

Try it online!


注意:使用null coalescing operator (?? [])确保snapshotTimes存在于数据中。


基于cmets;相同的解决方案,但使用array_reverse() 来反转输出。

foreach (array_reverse($domainArray->snapshotTimes) as $time) {
    ....

Try it online!

【讨论】:

  • 很好地使用了?? 运算符。
  • 这太棒了,谢谢。有没有办法以相反的方式订购它们?最新的优先?
  • @Designer 有,看看:array_reverse
【解决方案2】:

您正在尝试打印快照时间,但您为另一件事创建了一个循环。如果你想打印 snapshotTimes 代码会是这样的:

foreach($arr->$domainArray->snapshotTimes as $time){
    echo $time."</br>";
}

【讨论】:

    【解决方案3】:

    snapshotTimes 是一个数组,但您将它视为一个字符串。您可能应该运行另一个内部 foreach 以循环遍历 snapshotTimes 中的所有值。检查您的 PHP 错误日志。

    也许一个例子可以帮助他@Martin?

    示例:

    $domainArray = $services_api->getWithFields("/package/2507525/web/timelineBackup/web");
    foreach ($domainArray as $arr) {
       if(is_array($arr->snapshotTimes) && count($arr->snapshotTimes) > 0 ){
        $times = $arr->snapshotTimes;
        foreach($times as $timeRow){
            echo " TIME: ".$timeRow."<br>";
        }
        unset($times); //tidy up temp vars.
        }
    }
    

    我强调您需要check your PHP Error Log 来帮助您诊断这些结构问题。

    注意事项:

    • 您在 foreach 中的引用 $arr-&gt;$domainArray-&gt;snapshotTimes 不正确,您同时引用了 foreach 标签以及 foreach 标签的来源,这将导致错误。
    • PHP 变量应以小写字母开头。
    • 如果由于任何其他原因在 foreach 循环中不需要 $domainArray =&gt; $arr,您可以通过循环数组而不是 容器 来简化循环,如 0stone0 shows on their answer

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多