为什么我的代码会产生一个关于未定义偏移量的通知?


Why does my code produce a notice about an undefined offset?

我有这样的通知:

注意:未定义的偏移量:1在D:' servers 'data'localweb'alexaTraffic.php第14行

第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;
?>

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

$usrank = (isset($rankus[1])) ? $rankus[1] : 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库吧!