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

时间:2014-05-20 18:02:38

标签: php notice

我有这个通知:

  

注意:未定义的偏移量: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;
?>

2 个答案:

答案 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库之一!