从update_post_meta创建动态多维数组

时间:2018-03-27 09:19:38

标签: php arrays wordpress multidimensional-array

我正在尝试为事件日历创建多维数组,用户可以在其中动态添加日期。最终结果应如下所示,其中日期是父键,时间是日期的子键:

日期:2018年3月1日|开始时间:上午9点|结束时间:上午11点

日期:2018年3月2日|开始时间:上午9点30分结束时间:上午11点30分

我的HTML表单输入如下,并使用jQuery克隆:

<input type="text" name="training_day[][date]">
<input type="text" name="training_day[date][][start_time]">
<input type="text" name="training_day[date][][end_time]">

我正在将表单数据保存到帖子中,如下所示:

<?php
     if (!empty($_POST['training_day'])) {
         update_post_meta($pid, 'training_day', $_POST['training_day']) 
     }

我使用下面的查询,print_r()结果如下:

$training_day = get_post_meta($post->ID, 'training_day', true);
print_r($training_day);

Array ( 
[0] => Array ( [date] => Thursday, 1 March, 2018 ) 
    [date] => Array ( 
        [0] => Array ( [start_time] => 9.00am ) 
        [1] => Array ( [end_time] => 11.00am ) 
        [2] => Array ( [start_time] => 9.30am ) 
        [3] => Array ( [end_time] => 11.30am ) 
    ) 
[1] => Array ( [date] => Friday, 2 March, 2018 ) 
) 

但我确实需要这样的东西:

Array ( 
[0] => Array ( [date] => Thursday, 1 March, 2018 ) 
    [date] => Array ( 
        [0] => Array ( [start_time] => 9.00am ) 
        [1] => Array ( [end_time] => 11.00am )
    ) 
[1] => Array ( [date] => Friday, 2 March, 2018 ) 
   [date] => Array ( 
        [0] => Array ( [start_time] => 9.30am ) 
        [1] => Array ( [end_time] => 11.30am ) 
    )
)

我尝试过各种各样的选项,在start_time和end_time输入的名称属性的各个位置添加[],没有任何运气。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

<input type="text" value="13:00" name="training_day[date][0][start_time]">
<input type="text" value="15:00" name="training_day[date][0][end_time]">
<input type="text" value="11:00" name="training_day[date][1][start_time]">
<input type="text" value="16:00" name="training_day[date][1][end_time]">

结果:

array(1) {
  ["training_day"]=>
  array(1) {
    ["date"]=>
    array(2) {
      [0]=>
      array(2) {
        ["start_time"]=>
        string(5) "13:00"
        ["end_time"]=>
        string(5) "15:00"
      }
      [1]=>
      array(2) {
        ["start_time"]=>
        string(5) "11:00"
        ["end_time"]=>
        string(5) "16:00"
      }
    }
  }
}

这应该是您所需要的,只需要声明开始和结束时间。其他值可能会覆盖以前的键。

另外,为什么要多个开始和结束时间?我们可能缺少背景。