2016-09-14 69 views
-3

我正在为我的一个网站创建日历,我有一个数组如下。注意:未定义偏移量:0 - PHP - Foreach

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" 
     } 
    } 
} 

[....] 

我需要组织这个日历。例如。

年 - 月 - - 项目 - 月 - - 项目

年[...]

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

+2

你应该表明导致未定义的偏移误差的代码。 *提示*错误信息告诉你错误发生在哪一行。包括有助于向读者展示问题的相关代码(即周围循环)。 – Sherif

+2

我真的很希望你确保当你访问10个月以后,你仍然在使用字符串来访问它们,因为[array [9]'和array [“09”]']不一样(http:// www .tehplayground.com /#iryv4NZhl)。只是关心你怎么不把10当作一个字符串 –

回答

0

我在黑暗中因缺乏正确的代码而在您的问题中发生了刺伤,并且假设您尝试使用array[09]来访问array("09" => array())时导致此错误。这些不会工作,因为09和08 = 0.

为什么?这是因为当你前缀0的整数它不再一个decimal number这是基体10(0-9),但一个Octal number其是基座8(0-7)

采取following code

$myarr = array(0 => 16, 9 => 12, "09" => 51); 

var_dump(09); 
var_dump($myarr[09]); 

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

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

还重申,我commentarray[9]是不一样的,但array["09"]array[10]一样array["10"]example

$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"]); 

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