2009-12-12 96 views
1

我有這個功能編碼來檢查使用他們的API一個免費電子鏈接的狀態:返回從函數(PHP)的陣列

function CheckLink($fileid, $filename) 
    { 
     $q = file_get_contents("http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles_v1&files=$fileid&filenames=$filename"); 
     $r = explode(",", $q); 
     switch ($r[4]) 
     { 
      case 0: 
       return array('status' => "0", 'desc' => "File not found"); 
       break; 
      case 1: 
       return 1; 
       break; 
      case 2: 
       return 1; 
       break; 
      case 3: 
       return array('status' => "0", 'desc' => "Server down"); 
       break; 
      case 4: 
       return array('status' => "0", 'desc' => "File marked as illegal"); 
       break; 
      case 5: 
       return array('status' => "0", 'desc' => "Anonymous file locked"); 
       break; 
      case 6: 
       return 1; 
       break; 
      default: 
       return array('status' => "0", 'desc' => "Unknown error"); 
     } 
    } 

如果函數返回1,該文件是活的。如果它返回一個數組,這意味着該文件已經死亡。它返回的數組是狀態碼(0,因爲它已經死了)以及要顯示給用戶的錯誤消息。現在

,我有這樣的代碼中的index.php:

if(is_array($var = CheckLink($match[1], $match[2]))) 
{ 
    echo $var[1]; 
} 

我試圖做的是檢查函數的結果是一個數組(指鏈接是死的),如果是,將錯誤消息回顯給用戶。但它不起作用,我沒有得到PHP錯誤,它不會在頁面上回顯任何內容。

對此有何幫助?謝謝。 :)

+0

print_r我知道這是不是問題,但因爲你退出功能達到任何'break'statement之前,務必使'break'語句中多餘的。 – 2009-12-12 22:20:55

回答

6

結果數組中沒有鍵1。將echo行更改爲echo $var['desc']

編輯WRT評論:

沒有,PHP的陣列'更像是哈希表:每個值都有一個鍵,通常是數字,但可以是一個字符串(我會說「可以是任何東西」 ,但我不確定可以成爲PHP關鍵的範圍)。如果你沒有指定一個,它就是一個整數,自動遞增鍵,所以這兩個數組是等效的:array('a', 'b', 'c')array(0 => 'a', 1 => 'b', 2 => 'c')

技術上有沒有「第二個元素」被[1]訪問,因爲散列表是未排序的。你可以訪問一個「無鑰匙」數組,因爲它實際上並不是無鑰匙的:它的關鍵只是自動定義的。

+0

啊哈,這樣一個愚蠢的錯誤。無論數組結構如何,我都認爲你可以像這樣引用一個數組元素。 謝謝:) – Joseph 2009-12-12 21:38:17

+0

這個答案看起來不錯。考慮一個更簡單的接口,不要使用數組......只是在出現問題時返回一個String,否則返回1或者繼續,如果有錯誤則返回錯誤,否則返回null ......只是一個想法。 – ndp 2009-12-12 21:40:29

+1

約瑟夫,你喜歡這個答案接受它通過點擊左邊的複選標記。 – 2009-12-12 22:05:26

1

你做$var?

$var = CheckLink($match[1], $match[2]); 
var_dump(is_array($var)); 
print_r($var);