从函数返回数组(PHP)

从函数返回数组(PHP),php,function,Php,Function,我将此函数编码为使用其API检查Rapidshare链路的状态: 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);

我将此函数编码为使用其API检查Rapidshare链路的状态:

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错误,也没有向页面回显任何内容


有什么帮助吗?谢谢。:)

结果数组中没有键
1
。将
echo
行更改为
echo$var['desc']

编辑WRT注释:

不,PHP“数组”更像是哈希表:每个值都有一个键,通常是数字,但可以是字符串(我会说“可以是任何东西”,但我不确定PHP中键的范围)。如果不指定一个,它将被设置为一个整数,自动递增键,因此这两个数组是等效的:
array('a','b','c')
array(0=>a',1=>b',2=>c')


从技术上讲,[1]不能访问“第二个元素”,因为哈希表是未排序的。您可以访问“无键”数组,因为它实际上不是无键数组:它的键只是自动定义的。

结果数组中没有键
1
。将
echo
行更改为
echo$var['desc']

编辑WRT注释:

不,PHP“数组”更像是哈希表:每个值都有一个键,通常是数字,但可以是字符串(我会说“可以是任何东西”,但我不确定PHP中键的范围)。如果不指定一个,它将被设置为一个整数,自动递增键,因此这两个数组是等效的:
array('a','b','c')
array(0=>a',1=>b',2=>c')


从技术上讲,[1]不能访问“第二个元素”,因为哈希表是未排序的。您可以访问“无键”数组,因为它实际上不是无键数组:它的键只是自动定义的。

您是否打印了
$var?

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

您是否打印了
$var?

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

啊哈,真是个愚蠢的错误。我认为无论数组的结构如何,都可以引用这样的数组元素。谢谢:)这个答案看起来不错。考虑一个更简单的接口,没有数组…如果有问题,只需返回一个字符串,否则返回1。。。或者进一步,如果有错误,则返回错误,否则返回null。。。只是个主意。啊哈,真是个愚蠢的错误。我认为无论数组的结构如何,都可以引用这样的数组元素。谢谢:)这个答案看起来不错。考虑一个更简单的接口,没有数组…如果有问题,只需返回一个字符串,否则返回1。。。或者进一步,如果有错误,则返回错误,否则返回null。。。只是一个想法。我知道这不是问题所在,但您正在使
break
语句冗余,因为您在到达任何
break
语句之前退出函数。我知道这不是问题所在,但您正在使
break
语句冗余,因为您在任何
break
语句已到达。