因为基本错误,我把头发拉了出来

时间:2016-11-09 06:16:16

标签: php loops

我想我已经老了,或者我只是愚蠢但我无法理解为什么我不能在一个简单的阵列上循环。

我有这段代码:

$results = [];
for ($i = 0; $i < count($links); $i++) {
   $results[] = [
      'site' => $links[$i],
      'pda'  => $data[$i]->pda
   ];
}

$ links数组包含一个url列表,$ data包含一个像这样的值列表:

array(3) {
  0 =>  object(stdClass) 
    {
      "pda" => int 100
    }
  1 =>  object(stdClass) 
    {
      "pda" => int 100
    }
  2 =>  object(stdClass) 
    {
      "pda" => int 1
    }
}

编辑:这是print_r($ data)内容......似乎有些人不理解上面的转储并且更喜欢print_r解决方案: - |

Array
(
    [0] => stdClass Object
        (
            [pda] => 100
        )

    [1] => stdClass Object
        (
            [pda] => 1
        )

    [2] => stdClass Object
        (
            [pda] => 100
        )

)

如果我在循环中执行$ data [$ i] - &gt; pda我得到&#34;不能使用stdClass类型的对象作为数组&#34;错误。

如果我尝试将其作为对象访问,我会得到&#34;尝试获取非对象的属性&#34;错误。

底线,我是傻瓜还是我疯了?!

谢谢!

2 个答案:

答案 0 :(得分:0)

评论中的一点延伸答案:

您的$links可能与$data的数量不同。 在访问if else之前使用简单$data[$i]条件进行调试,如果失败则转储实际结果。

for ($i = 0; $i < count($links); $i++) {
  if (isset($data[$i])) {
      $results[] = [
       'site' => $links[$i],
       'pda'  => $data[$i]->pda
    ];
  } else {
    // Somethings wrong
    var_dump($i);
    var_dump($links);
    var_dump($data);
  }

}

因此,如果多次调用函数,则在发生错误时转储实际数据。

答案 1 :(得分:-1)

根据你的结构:

Array
(
    [0] => stdClass Object
        (
            [pda] => 100
        )

    [1] => stdClass Object
        (
            [pda] => 1
        )

    [2] => stdClass Object
        (
            [pda] => 100
        )

)

你的呼叫结构:

$data[$i]->pda

这里你以错误的方式调用,$ i不是数组的stdclass对象数组,试试这个:

$data->$i['pda'].

通过这个$ data监视你的stdclass对象数组然后&#34; pda&#34;作为一个数组调用。