我有这样的通知:
注意:未定义的偏移量: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库吧!