php - 在 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
为什么,以及如何解决?
解决方案
使用您提供的内容很难掌握您的代码。因为我不知道您的代码段中的哪一行给出了错误。但是,有几个地方可能会发生这种情况。
$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;
}
推荐阅读
- bash - Mac Shell .sh 命令不可能
- drools - Drools 中 @duration 和 @expires 的区别
- python - 如何在 Linux Azure Web App 上安装和配置 Oracle Instant Client
- r - 排除分组以在 tidyverse 中运行统计测试
- animation - 贝塞尔曲线的速度运动图
- php - 理解 php 的河豚检查
- spring - Grafana 使用 http_server_requests_seconds_count 绘制每分钟的 HTTP 请求数
- python - 将压缩的 Python 文件更改为可执行文件
- datadog - 如何在 DataDog 中的时间序列上设置线条颜色
- string - 从字符串中提取字符串标记对象?