سؤال

أتلقى الخطأ التالي في PHP

لاحظ إزاحة غير محددة 1: في C: wamp www تتضمن imdbgrabber.php سطر 36

هنا هو رمز PHP الذي يسبب ذلك:

<?php

# ...

function get_match($regex, $content)  
{  
    preg_match($regex,$content,$matches);     

    return $matches[1]; // ERROR HAPPENS HERE
}

ماذا يعني الخطأ؟

هل كانت مفيدة؟

المحلول

لو preg_match لم يجد مباراة ، $matches هي صفيف فارغ. لذلك يجب عليك التحقق إذا preg_match وجدت مباراة قبل الوصول إليها $matches[0], ، علي سبيل المثال:

function get_match($regex,$content)
{
    if (preg_match($regex,$content,$matches)) {
        return $matches[0];
    } else {
        return null;
    }
}

نصائح أخرى

كيفية إعادة إنتاج هذا الخطأ في PHP:

قم بإنشاء صفيف فارغ واطلب القيمة التي تم إعطاؤها مفتاحًا مثل هذا:

php> $foobar = array();

php> echo gettype($foobar);
array

php> echo $foobar[0];

PHP Notice:  Undefined offset: 0 in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) : 
eval()'d code on line 1

ماذا حدث؟

لقد طلبت صفيفًا لإعطائك القيمة الممنوحة لمفتاح لا يحتوي عليه. سوف يمنحك القيمة الفارغة ثم وضع الخطأ أعلاه في lerrovlog.

بحثت عن مفتاحك في الصفيف ، ووجد undefined.

كيف تجعل الخطأ لا يحدث؟

اسأل عما إذا كان المفتاح موجودًا أولاً قبل أن تذهب لتسأل عن قيمته.

php> echo array_key_exists(0, $foobar) == false;
1

في حالة وجود المفتاح ، احصل على القيمة ، إذا لم تكن موجودة ، فلا داعي للاستعلام عن قيمته.

خطأ غير محدد في PHP يشبه 'ArrayIndExoutofBoundException " في جافا.

مثال:

<?php
$arr=array('Hello','world');//(0=>Hello,1=>world)
echo $arr[2];
?>

خطأ: إزاحة غير محددة 2

هذا يعني أنك تشير إلى مفتاح صفيف غير موجود. يشير "Offset" إلى مفتاح INTEGER للمجموعة الرقمية ، ويشير "الفهرس" إلى مفتاح سلسلة الصفيف الترابطي.

التعويض غير المحدد يعني أن هناك مفتاح صفيف فارغ على سبيل المثال:

$a = array('Felix','Jon','Java');

// This will result in an "Undefined offset" because the size of the array
// is three (3), thus, 0,1,2 without 3
echo $a[3];

يمكنك حل المشكلة باستخدام حلقة (بينما):

$i = 0;
while ($row = mysqli_fetch_assoc($result)) {
    // Increase count by 1, thus, $i=1
    $i++;

    $groupname[$i] = base64_decode(base64_decode($row['groupname']));

    // Set the first position of the array to null or empty
    $groupname[0] = "";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top