我有这个通知:
注意:未定义的偏移量:D:\ serveurs \ data \ localweb \ alexa中的1 第14行的traffic.php
第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;
?>
答案 0 :(得分:3)
使用isset()
检查该值是否存在:
$usrank = (isset($rankus[1])) ? $rankus[1] : 0;
答案 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库之一!