Uncaught TypeError:不能访问string类型的偏移量



更新到PHP 8后,我从标题中得到了错误。代码类似于下面,它说错误就在行上:如果(is_array ($ course_data["步骤"][' h ']["sfwd-lessons")) {

完整代码在这里:

// bail out if this is not an event item
if ('sfwd-courses' !== get_post_type($post_id)) {
return;
}
$course_data  = get_post_meta($post_id, 'ld_course_steps', true);
if (!empty($course_data)) {
$lessons = array_keys($course_data['steps']['h']["sfwd-lessons"]);
$quizes = array_keys($course_data['steps']['h']["sfwd-quiz"]);
}
$lesson_data = [];
// Extract all steps of the courses
if(is_array($course_data['steps']['h']["sfwd-lessons"])){
foreach($course_data['steps']['h']["sfwd-lessons"] as $lesson){
$lesson_data = array_merge($lesson_data,array_values(array_keys($lesson["sfwd-topic"])));
$lesson_data = array_merge($lesson_data,array_values(array_keys($lesson["sfwd-quiz"])));
foreach($lesson["sfwd-topic"] as $topic){
$lesson_data = array_merge($lesson_data,array_values(array_keys($topic["sfwd-quiz"])));
}
}
}

这里的问题是,在PHP 8中,这个代码错误曾经抛出一个'警告',但现在它是一个致命的错误。别担心,这可能很容易解决!

问题是,$course_data从你的样例代码作为一个字符串返回,你试图使用数组偏移量对它。在定义$course_data的行后面试试var_dump($course_data),看看它返回的是什么类型的数据。

注意,get_post_meta()中的第三个参数被设置为true使它返回一个"单个值",而不是一个数组,所以这可能是问题所在。如果没有看到您的数据看起来像什么,很难确切地说这里的修复是什么,但第一步肯定是检查get_post_meta()为您返回的内容。

希望这对你有帮助!

最新更新