В чем может быть проблема с этим массивом? - PullRequest
0 голосов
/ 13 января 2010

Это исходный массив $pData У меня есть:

Array
(
    [code] => 105132
    [globalImages] => Array
        (
            [0] => 1148-1578-image_41ddeeef69eb94a8d9ccc1503d099810.jpg
        )

    [envImages] => Array
        (
            [0] => 1148-0-image_72e95c6424ec7bcd90994f1c0a3f4544.jpg
        )

    [attribs] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [id] => 1578
                            [uniqCode] => 105132-1578
                            [parentId] => 0
                            [type] => Colour
                        )
                )
        )
)

Когда я вызываю значение, используя следующее (line 337):

<?php echo strtolower($pData['attribs'][0][0]['type']);?>

Журнал ошибок PHP имеет следующую строку:

[13-Jan-2010 11:48:21] PHP Notice:  Undefined offset: 0 in D:\apps\path\to\file\pages\product.php on line 337

Что я мог делать не так? Насколько я понимаю, в этом простом звонке нет ничего плохого. Может быть, кто-то видит что-то подозрительное?

Спасибо за любой вклад!

РЕДАКТИРОВАТЬ 01:

Я забыл сказать, что echo дает правильный результат. Но он также делает указанную запись в журнале ошибок.

Выход var_dump($pData['attribs']):

array(1) {
  [0]=>array(2) {
    [0]=>array(22) {
      ["id"]=>string(4) "1578"
      ["uniqCode"]=>string(11) "105132-1578"
      ["parentId"]=>string(1) "0"
      ["type"]=>string(6) "Colour"
      ["title"]=>string(5) "Beech"
      ["swatch"]=>string(22) "variant-437-swatch.jpg"
      ["width"]=>string(4) "1830"
      ["depth"]=>string(3) "610"
      ["height"]=>string(3) "740"
      ["floorToSeat"]=>string(1) "0"
      ["unit"]=>string(2) "mm"
      ["weight"]=>float(89)
      ["volume"]=>float(2.311)
      ["groupPack"]=>int(1)
      ["fobkl"]=>string(3) "407"
      ["br3"]=>string(3) "441"
      ["br2"]=>string(3) "467"
      ["br1"]=>string(3) "496"
      ["rcp"]=>string(3) "515"
      ["gwm"]=>string(3) "592"
      ["gem"]=>string(3) "618"
      ["images"]=>array(1) {
        [0]=>string(52) "1148-1578-image_41ddeeef69eb94a8d9ccc1503d099810.jpg"
      }
    }
    [1]=>array(22) {
      ["id"]=>string(4) "1577"
      ["uniqCode"]=>string(11) "105132-1577"
      ["parentId"]=>string(1) "0"
      ["type"]=>string(6) "Colour"
      ["title"]=>string(13) "Natural Maple"
      ["swatch"]=>string(22) "variant-436-swatch.jpg"
      ["width"]=>string(4) "1830"
      ["depth"]=>string(3) "610"
      ["height"]=>string(3) "740"
      ["floorToSeat"]=>string(1) "0"
      ["unit"]=>string(2) "mm"
      ["weight"]=>float(155.06)
      ["volume"]=>float(20.305)
      ["groupPack"]=>int(1)
      ["fobkl"]=>string(3) "407"
      ["br3"]=>string(3) "441"
      ["br2"]=>string(3) "467"
      ["br1"]=>string(3) "496"
      ["rcp"]=>string(3) "515"
      ["gwm"]=>string(3) "592"
      ["gem"]=>string(3) "618"
      ["images"]=>array(1) {
        [0]=>string(52) "1148-1577-image_9c4fc8337e5c106ea6b69863e68f54bb.jpg"
      }
    }
  }
}

Ответы [ 3 ]

1 голос
/ 13 января 2010

Отладчик может помочь найти ошибку, например, xdebug и netbeans в качестве внешнего интерфейса.

Пожалуйста, убедитесь, что исходная строка на самом деле echo strtolower($pData['attribs'][0][0]['type']), например с помощью обработчика ошибок, например:

function myErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
  if ( E_NOTICE===$errno && is_readable($errfile) ) {
    $source = file($errfile);
    for($i=max(0,$errline-4); $i<$errline+3; $i++ ) {
      if ( isset($source[$i]) ) {
        if ( $i+1===$errline ) {
          echo ' >>> ';
        }
        echo $source[$i];
      }
    }
  }

  return false;
}
$old_error_handler = set_error_handler('myErrorHandler');
0 голосов
/ 13 января 2010

Я не вижу ничего плохого - единственная возможность состоит в том, что вы определили одну или обе клавиши 0 как строку '0', делая ее ассоциативным индексом (а не числовым)

$pData['attribs']['0']['0']['type'] = 'Colour';

В этом случае вам также нужно ссылаться на него как на строку

0 голосов
/ 13 января 2010

Сделайте print_r в строке непосредственно перед эхом, чтобы вы были уверены, что видите массив, с которым фактически работает ваша функция. Это может быть проблема с областью видимости (т. Е. $ PData - это локальный массив в функции, и вы вызываете echo вне этой функции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...