2009-12-12 77 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);