【问题标题】:Undefined offset: 0 with PHP array未定义的偏移量:0 与 PHP 数组
【发布时间】:2016-09-19 13:56:39
【问题描述】:

我的一个存储库中的 Symfony 2 Web 项目中有以下代码:

 $result = $qb->getQuery()->getResult();
 $converted = $this->transformArray($result);
 return $converted[0];

我的问题:

我得到以下指向最后一行的错误:

Notice: Undefined offset: 0

背景:

我的函数transformArray() 执行以下操作:

 private function transformArray($rows)
    {
        foreach ($rows as $i => $row) {
            $rows[$i]['hexcolor'] = $this->convertColor($row['colorR'], $row['colorG'], $row['colorB']);
        };

        return $rows;
    }

在这个操作之后,我的变量$converted 包含一个这样的数组,只有一个结果:

array (
  0 => 
  array (
    'subjectId' => 1234,
    'subjectName' => 'English',
    'hexcolor' => '#ff00'
  )
)

谁能解释为什么执行$converted[0](= 尝试访问 0 索引)会导致未定义的偏移错误?将数组输出粘贴到 PHPFiddle 并尝试访问 0 索引工作得很好。为什么我的 Symfony 2 项目中没有?

【问题讨论】:

  • 发布你的 transformArray() 值
  • 确认$result 有一个值(即您的查询没有失败)?
  • 我会:要查看任何数组中的第一个条目:reset $converted; 然后:current($converted); 将获得第一个条目的值,key($converted); 将获得该条目的索引。这适用于所有 PHP 数组。
  • 'key($converted)' 给我 0。但是为什么还有这个偏移错误???
  • 调试:var_dump(!empty($converted), $converted); 应该返回true 和一个数组或实现ArrayAccess 的对象。不管怎样,当您尝试访问它时,您会看到导致未定义索引的原因。

标签: php arrays symfony offset


【解决方案1】:

这就是用你的代码多跑一点点的地方。也就是说,它的意思很简单,只需添加几行额外的代码,如下所示:

<?php   
    $result     = $qb->getQuery()->getResult();

    // DOES THE QUERY EVEN RETURN ANY RESULTS?
    // IF NOT, SET $converted TO EMPTY ARRAY: WHY NOT? 
    $converted  = (!empty($result)) ? $this->transformArray($result) : array();

    // RETURN $converted[0] ONLY IF IT EXISTS, OTHERWISE NULL
    return isset($converted[0]) ? $converted[0] : null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多