Построить многомерный массив - PullRequest
0 голосов
/ 01 апреля 2020

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

Теперь этот код PHP принимает переменную $events для отображения событий, структуры массив должен быть следующим:

$events = [
  '2020-04-05' => [
    'text' => "An event for the 5 july 2015",
    'href' => "http://example.com/link/to/event"
  ],
  '2020-04-23' => [
    'text' => "An event for the 23 july 2015",
    'href' => "/path/to/event"
  ],
];

Теперь, когда я не слишком много работал с многомерными массивами в PHP (кроме тех, которые были получены в качестве результата базы данных), я попытался создать этот массив, но Кажется, я не могу ..

То, что я получаю из моей базы данных - это массив, который выглядит следующим образом:

array (


 0 => 
  array (
    'ID' => '1',
    'link' => 'example.com/link',
    'description' => 'that\'s a description',
    'eventDate' => '2020-04-07 01:04:25',
  ),
  1 => 
  array (
    'ID' => '6',
    'link' => 'example.com/link',
    'description' => 'that\'s a description',
    'eventDate' => '2020-04-15 00:00:00',
  ),
  2 => 
  array (
    'ID' => '7',
    'link' => 'example.com/link',
    'description' => 'that\'s a description',
    'eventDate' => '2020-04-16 07:24:11',
  ),
  3 => 
  array (
    'ID' => '8',
    'link' => 'example.com/link',
    'description' => 'that\'s a description',
    'eventDate' => '2020-04-26 07:07:10',
  ),
)

Итак, я подумал о foreach над этим массивом создайте новый массив для ранее созданных событий и добавьте в него что-то вроде $events[$foreachVar["date"] = "test", чтобы хотя бы получить этот индекс, но даже это не поможет.

Может кто-нибудь помочь мне с это или есть лучший способ сделать это (лучший календарь, который лучше интегрирует базу данных?)

PS: Если не возражаете, я использую Fat Free Framework в качестве небольшой микросхемы.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Вы можете перебрать результаты своей базы данных, получив в качестве ключа выходного массива часть date для eventDate и выбрав для вывода элементы description и link:

$events = array();
foreach ($data as $event) {
    $events[date('Y-m-d', strtotime($event['eventDate']))] = array(
        'text' => $event['description'],
        'href' => $event['link']
    );
}
var_export($events);

Вывод (для ваших примеров данных):

array (
  '2020-04-07' => 
  array (
    'text' => 'that\'s a description',
    'href' => 'example.com/link',
  ),
  '2020-04-15' => 
  array (
    'text' => 'that\'s a description',
    'href' => 'example.com/link',
  ),
  '2020-04-16' => 
  array (
    'text' => 'that\'s a description',
    'href' => 'example.com/link',
  ),
  '2020-04-26' => 
  array (
    'text' => 'that\'s a description',
    'href' => 'example.com/link',
  ),
)

Демонстрация на 3v4l.org

Примечание. Я немного параноидален с датой, желая разрешить любой формат в базе данных. Если он определенно находится в форме yyyy-mm-dd HH:ii:ss, вы можете просто использовать substr($event['eventDate'], 0, 10) для извлечения части даты, например

foreach ($data as $event) {
    $events[substr($event['eventDate'], 0, 10)] = array(
        'text' => $event['description'],
        'href' => $event['link']
    );
}
0 голосов
/ 01 апреля 2020

Попробуйте это

$events = [];
foreach($array as $key => $value){
  $events[$value['date']] = $value;  
}

print $ events, и вы получите идею. спросите меня, если вам нужна дополнительная помощь.

...