这个阵列可能有什么问题?

时间:2010-01-13 12:11:54

标签: php arrays

这是我拥有的源$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 个答案:

答案 0 :(得分:1)

调试器可以帮助查找错误,例如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');

答案 1 :(得分:0)

在echo之前的行上执行print_r,因此您确定可以看到函数实际工作的数组。这可能是一个范围问题(即,$ pData是函数中的本地数组,你在该函数之外调用echo)。

答案 2 :(得分:0)

我看不出任何错误 - 唯一的可能是您将0个键中的一个或两个定义为字符串'0',使其成为关联索引(而不是数字)

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

在这种情况下,您还需要将其称为字符串