2014-01-15 40 views
-1

我想使用的PHP項目2.2.2天氣,但它有很多問題 這裏是一個代碼爲什麼在PHP這個消息來了:通知未定義,偏移量: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

您確定$ regs [2]是否存在? – Joshua

+0

'var_dump($ regs);'你會得到你的答案。 – Rikesh

+0

感謝您的幫助:) – user1991

回答

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])?

+0

謝謝..錯誤是現在刪除 – user1991

+0

歡迎:) –

0

使用正則表達式:

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

?:該集團將不會是一個捕獲組,它的存在只是爲了讓你的?修改適用於它。將它包裝在另一個組中可以捕獲該組的內容;如果可選的正則表達式不匹配,這將是一個空字符串。