注意:未定义的偏移量:0 - PHP - Foreach

时间:2016-09-14 23:29:24

标签: php arrays foreach undefined

我正在为我的某个网站创建日历,我有一个数组如下。

array(2) {
[2017]=> array(1) {
    ["01"]=> array(1) {
        [0]=> object(stdClass)#5374 (4) {
            ["ID"]=> string(3) "409"
            ["data"]=> string(10) "01/01/2017"
            ["post_title"]=> string(5) "TESTE"
            ["guid"]=> string(71) "?post_type=todos_os_cursos&p=409" 
        }
    }
}

[2016]=> array(2) {
    [10]=> array(2) {
        [0]=> object(stdClass)#5974 (4) {
            ["ID"]=> string(3) "153"
            ["data"]=> string(10) "19/10/2016"
            ["post_title"]=> string(23) "Mundi Chef Professional"
            ["guid"]=> string(71) "?post_type=todos_os_cursos&p=153" }

        [1]=> object(stdClass)#5977 (4) {
            ["ID"]=> string(3) "145"
            ["data"]=> string(10) "01/10/2016"
            ["post_title"]=> string(30) "Mundi Confeiteiro Professional"
            ["guid"]=> string(71) "?post_type=todos_os_cursos&p=145"
        }
    }

    ["09"]=> array(4) {
        [0]=> object(stdClass)#5978 (4) {
            ["ID"]=> string(3) "153"
            ["data"]=> string(10) "30/09/2016"
            ["post_title"]=> string(23) "Mundi Chef Professional"
            ["guid"]=> string(71) "?post_type=todos_os_cursos&p=153"
        }
    }
}

[....]

我需要将其整理为日历。例如。

年份 - 月 - - 这几项 - 月 - - 项目

年[...]

但我没有得到。每次我尝试访问项目时总会遇到同样的问题。注意:未定义的偏移量。

1 个答案:

答案 0 :(得分:0)

由于您的问题中缺少正确的代码,我很想在黑暗中进行攻击,并假设当您尝试array("09" => array())访问$myarr = array(0 => 16, 9 => 12, "09" => 51); var_dump(09); var_dump($myarr[09]); 时会导致此错误。这些不会起作用因为09,而且08 = 0。

为什么呢?这是因为当你为0加一个整数时,它不再是基数为10(0-9)的decimal number,而是基数为8(0-7)的Octal number

following code

var_dump(09)

你可以看到我们$myarr[09]的结果是int(0),因为08和09在八进制数系统中是无效的。所以当我们去$myarr[0]时,我们实际上是array[9],然后我们得到0键下的值。

你的Undefined offset 0通知很可能是因为这个,09 = int(0)所以你试图访问数组中未定义的值。

另外,要重申我的commentarray["09"]array[10]不同,但array["10"]$mayarr = array("09"=>22); var_dump($mayarr); var_dump($mayarr[9]); $mayarr = array("09"=>22, 9=>106, 10=> 3, "10"=> 50); var_dump($mayarr); var_dump($mayarr[9]); var_dump($mayarr[10]); var_dump($mayarr["10"]); 相同。 example

Using Theano backend.
Using gpu device 1: GeForce GTX 770 (CNMeM is disabled, cuDNN 5105)
Epoch 1/10
 mbloss 1.00058555603 lr 0.0010000000475
  128/10000 [..............................] - ETA: 3s - loss: 1.0006 mbloss 1.00051558018 lr 0.0010000000475
  256/10000 [..............................] - ETA: 4s - loss: 1.0006 mbloss 1.00094401836 lr 0.0010000000475
  384/10000 [>.............................] - ETA: 4s - loss: 1.0007 mbloss 1.00001847744 lr 0.0010000000475
  512/10000 [>.............................] - ETA: 3s - loss: 1.0005 mbloss 1.00019526482 lr 0.0010000000475
  640/10000 [>.............................] - ETA: 3s - loss: 1.0005 mbloss 0.999684214592 lr 0.0010000000475
  768/10000 [=>............................] - ETA: 3s - loss: 1.0003 mbloss 0.999649345875 lr 0.0010000000475
  896/10000 [=>............................] - ETA: 3s - loss: 1.0002 mbloss 1.00126934052 lr 0.0010000000475
 1024/10000 [==>...........................] - ETA: 3s - loss: 1.0004 mbloss 1.00039303303 lr 0.0010000000475
 1152/10000 [==>...........................] - ETA: 3s - loss: 1.0004 mbloss 1.00083625317 lr 0.0010000000475
 1280/10000 [==>...........................] - ETA: 3s - loss: 1.0004 mbloss 1.00036990643 lr 0.0010000000475
 1408/10000 [===>..........................] - ETA: 2s - loss: 1.0004 mbloss 0.999625504017 lr 0.0010000000475
 1536/10000 [===>..........................] - ETA: 2s - loss: 1.0003 mbloss 1.0005017519 lr 0.0010000000475
 1664/10000 [===>..........................] - ETA: 2s - loss: 1.0004 mbloss 0.999049901962 lr 0.0010000000475
 1792/10000 [====>.........................] - ETA: 2s - loss: 1.0003 mbloss 0.999758243561 lr 0.0010000000475
 1920/10000 [====>.........................] - ETA: 2s - loss: 1.0002 mbloss 0.99894207716 lr 0.0010000000475
 2048/10000 [=====>........................] - ETA: 2s - loss: 1.0001 mbloss 1.00113630295 lr 0.0010000000475
 2176/10000 [=====>........................] - ETA: 2s - loss: 1.0002 mbloss 0.999107062817 lr 0.0010000000475

如果你要使用数字作为键,你应该真的是一致的,整数或字符串