Есть ли лучший способ добавить многомерный массив в PHP?

Мне удалось это сделать, это отлично работает для моих нужд, однако у меня такое чувство, что должно быть что-то намного более аккуратное.

$shifts = Shift::all(); //I am working with laravel
$shiftObj = array();
$i =0; //I create this temp var to fill the sub object block
foreach($shifts as $shift){
$shiftObj[$i]['campaign'] = Campaign::find($shift->campaign_id)->name;
$shiftObj[$i]['place'] = Places::find($shift->place_id)->name;
$shiftObj[$i]['shift_date'] = $shift->shift_date;
$shiftObj[$i]['start_time'] = $shift->start_time;
$shiftObj[$i]['end_time'] = $shift->end_time;
$i++;
}
return json_encode($shiftObj);

С этим кодом я получаю следующий ответ:

[{"campaign":"camp1","place":"store1","shift_date":"2014-12-09","start_time":"2014-12-09 00:00:00","end_time":"2014-12-09 15:01:00"},{"campaign":"camp2","place":"store2","shift_date":"2014-12-02","start_time":"2014-12-02 01:00:00","end_time":"2014-12-02 02:00:00"},{"campaign":"camp3","place":"store3","shift_date":"2014-12-30","start_time":"2014-12-30 16:00:00","end_time":"2014-12-31 05:00:00"}]

Затем я сделал следующее. (Думая, я нашел «лучший способ сделать это»).

    $shifts = Shift::all();
$shiftObj = array();

foreach($shifts as $shift){
$shiftObj[]['campaign'] = Campaign::find($shift->campaign_id)->name;
$shiftObj[]['place'] = Places::find($shift->place_id)->name;
$shiftObj[]['shift_date'] = $shift->shift_date;
$shiftObj[]['start_time'] = $shift->start_time;
$shiftObj[]['end_time'] = $shift->end_time;

}
return json_encode($shiftObj);

И я получил такой результат:

[{"campaign":"camp1"},{"place":"store1"},{"shift_date":"2014-12-09"},{"start_time":"2014-12-09 00:00:00"},{"end_time":"2014-12-09 15:01:00"},{"campaign":"camp2"},{"place":"store2"},{"shift_date":"2014-12-02"},{"start_time":"2014-12-02 01:00:00"},{"end_time":"2014-12-02 02:00:00"},{"campaign":"camp3"},{"place":"store3"},{"shift_date":"2014-12-30"},{"start_time":"2014-12-30 16:00:00"},{"end_time":"2014-12-31 05:00:00"}]

Я надеюсь, что уже есть повторяющийся вопрос. Пожалуйста, помогите мне найти лучший способ сделать это, может быть, учебник или документацию, где я могу изучить, я был бы очень признателен. Заранее спасибо!

0

Решение

Проблема с вашим вторым подходом заключается в том, что каждый раз, когда вы делаете $ shiftObj [], вы помещаете новый массив в конец $ shiftObj, содержащий только одно из ваших свойств.

Поэтому вам нужно либо указать ключ массива, как вы это делали в первом подходе, либо определить весь массив, который вы одновременно нажимаете, следующим образом:

$shifts = Shift::all();
$shiftObj = array();

foreach($shifts as $shift){
$shiftObj[] = array(
'campaign' => Campaign::find($shift->campaign_id)->name,
'place'    => Places::find($shift->place_id)->name,
'shift_date' => $shift->shift_date,
'start_time' => $shift->start_time,
'end_time' => $shift->end_time
);
}

return json_encode($shiftObj);
2

Другие решения

Других решений пока нет …