构建动态关联多维数组

时间:2016-09-30 07:37:56

标签: php arrays multidimensional-array

我已经看到很多关于多维数组的问题,以及如何构建它们,并且在尝试一些答案时我仍然会收到错误。所以我在想我想要做的事情是不可能的,也许我应该使用JSON呢?

我有来自源的数据,该数据作为JSON对象返回。它有很多数据,其中我只需要少量数据。现在我需要把它分类到日期:

 $temp_array = array();
        foreach ($data as $booking_id => $booking) {
            $setdate = '';
            $b = $this->getBooking($booking_id);
            foreach ($b as $k => $v) {
                $setdate = date('d-m-Y', $booking['start_date']);
                if(!in_array($setdate, $temp_array)) {
                    $temp_array = array('date' => $setdate);
                }
                $temp_array['date'][] = array($k => $v);
            }
        }

我需要将日期作为数组的第一个节点,并将数据作为第二个节点中的数据。在迭代中找到新日期时,它会创建另一个新节点:

[0] => 1/10/16
           [0] => array( ['key'] =>['value'])
           [1] => array( ['key'] =>['value'])
           [2] => array( ['key'] =>['value'])
[1] => 7/10/16
           [0] => array( ['key'] =>['value'])
           [1] => array( ['key'] =>['value'])
           [2] => array( ['key'] =>['value'])
[2] => 14/10/16
           [0] => array( ['key'] =>['value'])
           [1] => array( ['key'] =>['value'])
           [2] => array( ['key'] =>['value'])
[3] => 21/10/16
           [0] => array( ['key'] =>['value'])
           [1] => array( ['key'] =>['value'])
           [2] => array( ['key'] =>['value'])

我似乎无法随身携带,因为我得到的错误是[] operator not supported for stringsWarning: Attempt to modify property of non-object in,具体取决于我找到的其他示例。

我认为这里的问题是,数据不是任何顺序,因此它可以填充节点[0],然后[3],然后返回[0],依此类推。

任何想法到底我做错了什么?

由于

阿迪

更新

使用此代码,这是中间的foreach:

 $b = $this->getBooking($booking_id);
 foreach ($b as $k => $v) {
     $setdate = date('d-m-Y', strtotime($booking['date_desc']));
     if(!in_array($setdate, $temp_dates)) {
         array_push($temp_dates, $setdate);
         $temp_array[]['date'] = $setdate;
     }
 }

给我这个结果:

Array ( [0] => Array ( [date] => 22-10-2016 )
        [1] => Array ( [date] => 01-10-2016 ) 
        [2] => Array ( [date] => 08-10-2016 ) 
        [3] => Array ( [date] => 15-10-2016 )
)

哪个是对的。所以现在,我需要添加一个日期到来,$ tem_array有一个标题,添加另一个数组:

Array ( [0] => Array ( [date] => 22-10-2016 ) => [0] => $data
                                                 [1] => $data
                                                 [2] => $data
        [1] => Array ( [date] => 01-10-2016 ) => [0] => $data
                                                 [1] => $data 
                                                 [2] => $data
        [2] => Array ( [date] => 08-10-2016 ) => [0] => $data
        [3] => Array ( [date] => 15-10-2016 ) => [0] => $data
                                                 [1] => $data
)

希望这能更好地解释它。我的第一位是正确的,但是当一个日期已经在那里时,我需要向上移动一个节点。

1 个答案:

答案 0 :(得分:0)

我认为我让它复杂化了。这是我想要的最终代码。

function sortcf($data) {
        $temp_array = array();
        $temp_dates = array();
        foreach ($data as $booking_id => $booking) {
            $b = $this->getBooking($booking_id);
            $setdate = date('d-m-Y', strtotime($booking['date_desc']));
            $temp_array[$setdate][] = ($b);
        }
        $this->wcg_am_data = $temp_array;
    }