为什么这条消息来自php:notice undefined offset:2

时间:2014-01-15 08:22:13

标签: php

我想使用PHP Weather 2.2.2项目,但它有很多问题 这是一个代码

function get_languages($type) {

    static $output = array();

    if (empty($output)) {

        /* I use dirname(__FILE__) here instead of PHPWEATHER_BASE_DIR
         * because one might use this function without having included
         * phpweather.php first. */
        require(dirname(__FILE__) . '/languages.php');

        $dir = opendir(dirname(__FILE__) . '/output');
        while($file = readdir($dir)) {

            // I got a problem in  this line below     

            if (ereg("^pw_${type}_([a-z][a-z])(_[A-Z][A-Z])?\.php$", $file, $regs)) {

            // After i change it to the line mentioned below i got error undefined offset:2 in line 2 mentioned below
            // how to correct this error or is there any way to correct this code

            if(preg_match("#^pw_${type}_([a-z][a-z])(_[A-Z][A-Z])?\.php$#", $file, $regs)) {
                $output[$regs[1] . $regs[2]] = $languages[$regs[1] . $regs[2]];
            }
        }
        closedir($dir);
    }

    asort($output);

    return $output;
}

2 个答案:

答案 0 :(得分:0)

您会看到此通知,因为未设置$regs[2]

if(preg_match("#^pw_${type}_([a-z][a-z])(_[A-Z][A-Z])?\.php$#", $file, $regs)) {
    $output[$regs[1] . (isset($regs[2]) ? $regs[2] : '')] = $languages[$regs[1] . (isset($regs[2]) ? $regs[2] : '')];
}

使用isset()进行检查是否存在数组值或否。如果不存在与空字符串''

的串联

这是因为您在正则表达式中使用了 (_[A-Z][A-Z])?

答案 1 :(得分:0)

使用此正则表达式:

        if(preg_match("#^pw_${type}_([a-z][a-z])((?:_[A-Z][A-Z])?)\.php$#", $file, $regs)) {

?:组不会成为捕获组,只是为了允许您对其应用?修饰符而存在。将其包装在另一组中可以捕获其中的内容;如果可选的正则表达式不匹配,则为空字符串。