2016-09-19 4 views
0

У меня есть следующий код в моем веб-проекта Symfony 2 в одном из моих репозиториях:Undefined смещение: 0 с PHP массива

$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?

+0

Опубликуйте transformArray() значение –

+0

Убедитесь, что '$ result' имеет значение (то есть, ваш запрос не отсутствие)? – WillardSolutions

+0

Я бы: Чтобы увидеть первую запись в любом массиве: 'reset $ convert;' then: 'current ($ convert);' получит значение первой записи и 'key ($ convert);' с получением индекса этой записи. Это работает для всех массивов PHP. –

ответ

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; 
Смежные вопросы