首页 > 解决方案 > 在 foreach 中获得通知

问题描述

我有 foreach

foreach ($query->posts as $key => $value) {
                                if ($value->ID == $post->ID) {
                                    $nextID = $query->posts[$key + 1]->ID;
                                    $prevID = $query->posts[$key - 1]->ID;
                                    break;
                                }
                            }

但我注意到

Notice: Undefined offset: 3 in path...line 797

Notice: Trying to get property 'ID' of non-object in path... line 797

为什么,以及如何解决?

标签: phpwordpress

解决方案


使用您提供的内容很难掌握您的代码。因为我不知道您的代码段中的哪一行给出了错误。但是,有几个地方可能会发生这种情况。

$nextID = $query->posts[$key + 1]->ID;
$prevID = $query->posts[$key - 1]->ID;

您有一个查询,其中包含一组帖子$query->posts,但是,您根据$key变量进行计算。例如。如果您的数组中有 4 个项目。最后一个$key变量将包含 3。但是当您添加 +1 时,它找不到该数组项。

尝试将您的代码更改为:

<?php
declare(strict_types=1);

foreach ($query->posts as $key => $value) {
    $nextID = null;
    $prevID = null;

    if ($value->ID == $post->ID) {
        $hasNextId = isset($query->posts[$key + 1]);
        $hasPrevId = isset($query->posts[$key + 1]);

        $nextID = $hasNextId ? $query->posts[$key + 1]->ID : null;
        $prevID = $hasPrevId ? $query->posts[$key - 1]->ID : null;
        break;
    }
}

我已添加到布尔变量,以检查帖子是否为以前的 ID(对于第一个数组键)。如果将帖子作为下一个 ID(用于最后一个数组键)。

如果他们没有下一个或上一个 ID,则$nextID和/或的$prevID值为null. 这将减轻错误,但是,它可能会进一步破坏代码。请确保添加适当的检查,例如:

旧代码:

echo "next is " . $nextID;

新代码:

if ($nextID !=== null) {
    echo "next is " . $nextID;
}

推荐阅读