如何将索引二维数组重构为关联二维数组以及删除不需要的列并重命名列?

问题描述 投票:0回答:2

我正在努力从数据库构建一个多维数组以在日历中显示数据......基本上,我有一个表,其中总是有日期、描述和事件的链接。然后我想在日历中显示该数据,并找到了一个 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 作为一个小微框架。

php arrays multidimensional-array
2个回答
1
投票

您可以迭代数据库结果,获取

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
投票

试试这个

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

打印 $events 你就会明白了。 问我是否需要更多帮助。

© www.soinside.com 2019 - 2024. All rights reserved.