0

我有这个通知:

注意:未定义的偏移量:第 14 行 D:\serverurs\data\localweb\alexa traffic.php 中的 1

第 14 行是这样的:

$usrank = ($rankus[1]) ? $rankus[1] : 0;

我该如何解决?

这是我的代码:

<?php
$source = file_get_contents('http://data.alexa.com/data?cli=10&dat=snbamz&url=linuxplained.com');

//Alexa Rank
preg_match('/\<popularity url\="(.*?)" text\="([0-9]+)" source\="panel"\/\>/si', $source, $matches);
$aresult = ($matches[2]) ? $matches[2] : 0;

//Alexa Sites Linking in
preg_match('/\<linksin num\="([0-9]+)"\/\>/si', $source, $asli);
$alinksin = ($asli[1]) ? $asli[1] : 0;

//Alexa US Rank
preg_match('/\<country code\="US" name\="United States" rank\="([0-9]+)"\/\>/si', $source, $rankus);
$usrank = ($rankus[1]) ? $rankus[1] : 0;

//Alexa Reach Rank
preg_match('/\<reach rank\="([0-9]+)"\/\>/si', $source, $reachr);
$areach = ($reachr[1]) ? $reachr[1] : 0;
?>
4

2 回答 2

3

用于isset()检查该值是否存在:

$usrank = (isset($rankus[1])) ? $rankus[1] : 0;
于 2014-05-20T18:03:19.903 回答
0

发生此错误是因为数组$rankus在索引 1 处没有值。最简单的解决方法是isset在尝试使用索引之前检查索引是否存在。那么你的可能是:

$usrank = (isset($rankus[1])) ? $rankus[1] : 0;

这使用了三元运算符,相当于以下(更容易理解)代码:

$usrank;
if (isset($rankus[1]) {
    $usrank = $rankus[1];
} else {
    $usrank = 0;
}

希望您现在了解问题发生的原因以及如何解决此问题。

不过,您的代码中还有更多问题。创建变量$aresult,$alinksin$areach时,也不会检查所需的索引是否存在。您可能应该这样做,以避免出现更多错误,例如您目前遇到的错误。

最后,我注意到您正在尝试使用正则表达式解析 XML 文档。这可能会在很多方面出错,最好使用“真正的”XML 解析器。看看SimpleXML或其他用于 PHP 的 XML 库之一!

于 2014-05-20T18:20:36.357 回答