2013-04-15 84 views
1

我写的代码应该做两件事:1-显示来自twitter用户的最新帖子2-搜索特定关键字。在第一部分,它完美的作品,但它在“搜索”选项的情况下所倾倒此错误消息失败:PHP中未定义的偏移量错误来自json响应

PHP公告:未定义抵消:

我运行这种格式的代码:

$ php script.php search keyword number 

下面是代码:

$result = file_get_contents("http://search.twitter.com/search.json?q=$argv[2]&rpp=$argv[3]&include_entities=true&result_type=mixed"); 
    $decoded = json_decode($result,true); 
    for($j=0; $j<$argv[3]; $j++) 
    { 

    echo ($decoded[$j]['text']); 



    } 
+1

的错误只是一个通知,它不会停止运行的代码,这是什么意思是,虽然乌拉圭回合试图可能使用处理不当被设置一个数组,最好的办法是'的print_r() ;'无论你使用的数组是什么,看看它们是否包含他们想要的。 – Breezer

+0

数组可能不包含任何东西。你应该检查'isset'什么的。错误的确切线是什么? – edwardmp

回答

3

我检查了Twitter的响应,它不匹配您试图访问数组的格式。 仅仅因为在响应中不存在,您无法通过$decoded[$j]['text']访问数据。

你是什么意思做的是:

$decoded[results][$j]['text'] 

我检查了它,这似乎工作正常。从响应(print_r的格式)

的摘录,你看为什么会发生。

Array (
    [completed_in] => 0.015 
    [max_id] => 322818055665225728 
    [max_id_str] => 322818055665225728 
    [page] => 1 
    [query] => testsearch 
    [refresh_url] => ?since_id=322818055665225728&q=testsearch&result_type=mixed&include_entities=1 
    [results] => Array 
    (
     [0] => Array 
     (
      [created_at] => Fri, 12 Apr 2013 21:06:36 +0000 
      [entities] => Array 
+0

不客气! – edwardmp

0

如果用户输入 '10'但查询只返回9个结果,for循环的第10次迭代将返回该通知(因为$ decode [9]不存在)。

也许尝试这样的事情

$limit = $argv[3]; 

if (count($decoded) < $limit) 
{ 
    $limit = count($decoded); 
} 

for ($j = 0; $j < $limit; $j++) 
{ 
... 
} 
+0

可能是真的,但这不是问题的根源。不过,他应该实施这样的事情。 – edwardmp