我对PHP非常陌生,我认为我正在努力实现的目标超出了我目前的技能水平.我有以下名为$exhibitions的数组:

Array
(
    [0] => Array
        (
            [exhibition_title] => Picasso
            [venue_name] => Gallery 1
            [room_name] => Room 4
            [start_date] => 2023-11-15
            [end_date] => 2023-12-10
            [room_id] => 261
            [exhibition_id] => 3540
            [venue_order] => 2
        )

    [1] => Array
        (
            [exhibition_title] => Monet
            [venue_name] => Gallery 4
            [room_name] => Room 2
            [start_date] => 2023-10-01
            [end_date] => 2023-11-13
            [room_id] => 274
            [exhibition_id] => 8417
            [venue_order] => 1
        )
)

我需要做的是使用Start_Date和End_Date创建每个展览开幕的日期范围,然后对于每个日期,基本上复制现有子数组中的其余信息,并将单独的日期附加到子数组的末尾.我想要的输出是:

Array
(
    [0] => Array
        (
            [exhibition_title] => Picasso
            [venue_name] => Gallery 1
            [room_name] => Room 4
            [start_date] => 2023-11-15
            [end_date] => 2023-12-10
            [room_id] => 261
            [exhibition_id] => 3540
            [venue_order] => 2
            [date] => 2023-11-15
        )
    [1] => Array
        (
            [exhibition_title] => Picasso
            [venue_name] => Gallery 1
            [room_name] => Room 4
            [start_date] => 2023-11-15
            [end_date] => 2023-12-10
            [room_id] => 261
            [exhibition_id] => 3540
            [venue_order] => 2
            [date] => 2023-11-16
        )
    [2] => Array
        (
            [exhibition_title] => Picasso
            [venue_name] => Gallery 1
            [room_name] => Room 4
            [start_date] => 2023-11-15
            [end_date] => 2023-12-10
            [room_id] => 261
            [exhibition_id] => 3540
            [venue_order] => 2
            [date] => 2023-11-17
        )
    [... etc. for the rest of the dates in the Picasso date range]

    [25] => Array
        (
            [exhibition_title] => Monet
            [venue_name] => Gallery 4
            [room_name] => Room 2
            [start_date] => 2023-10-01
            [end_date] => 2023-11-13
            [room_id] => 274
            [exhibition_id] => 8417
            [venue_order] => 1
            [date] => 2023-10-01
        )

    [26] => Array
        (
            [exhibition_title] => Monet
            [venue_name] => Gallery 4
            [room_name] => Room 2
            [start_date] => 2023-10-01
            [end_date] => 2023-11-13
            [room_id] => 274
            [exhibition_id] => 8417
            [venue_order] => 1
            [date] => 2023-10-02
        )

    [27] => Array
        (
            [exhibition_title] => Monet
            [venue_name] => Gallery 4
            [room_name] => Room 2
            [start_date] => 2023-10-01
            [end_date] => 2023-11-13
            [room_id] => 274
            [exhibition_id] => 8417
            [venue_order] => 1
            [date] => 2023-10-03
        )
    [... etc. for the rest of the dates in the Monet date range]
)

我看到了this similar post,并修改了它,使其不是 echo $given_date,而是将其添加到数组中的一个名为"date"的新列中.

foreach ($exhibitions as $key => $value) {

    $startDate = strtotime($value['start_date']);
    $endDate = strtotime($value['end_date']);

    // Loop between timestamps, 24 hours at a time
    for ($i = $startDate; $i <= $endDate; $i = $i + 86400 ) {
            $given_date = date('Y-m-d', $i );     
            $exhibitions[$key]['date'] = $given_date;
    }    

};

问题是,它不是在日期范围内的每个日期添加一个日期,而是只添加范围内的最后一个日期.当我 echo $given_date只是为了确保它迭代每个日期时,它列出了范围内的每个日期,所以我假设我添加新列的方式有问题,但我不知道是什么.

答案看起来很简单,但我就是摸不着头脑.预先感谢您的帮助和专业知识!

推荐答案

你的代码中有一个小错误.在循环的每次迭代中,您都要删除'date'键,因此只有最后一个日期存储在原始数组中.我已经为你重写了代码,请看看,希望它能解决你的问题.

<?php

$exhibitions = array(
    array(
        'exhibition_title' => 'Picasso',
        'venue_name' => 'Gallery 1',
        'room_name' => 'Room 4',
        'start_date' => '2023-11-15',
        'end_date' => '2023-12-10',
        'room_id' => 261,
        'exhibition_id' => 3540,
        'venue_order' => 2,
    ),
    array(
        'exhibition_title' => 'Monet',
        'venue_name' => 'Gallery 4',
        'room_name' => 'Room 2',
        'start_date' => '2023-10-01',
        'end_date' => '2023-11-13',
        'room_id' => 274,
        'exhibition_id' => 8417,
        'venue_order' => 1,
    )
);

$result = array();

foreach ($exhibitions as $key => $value) {
    $startDate = strtotime($value['start_date']);
    $endDate = strtotime($value['end_date']);

    // Loop between timestamps, 24 hours at a time
    for ($i = $startDate; $i <= $endDate; $i = $i + 86400) {
        $given_date = date('Y-m-d', $i);

        // Create a new array for each date and append it to the result array
        $result[] = array(
            'exhibition_title' => $value['exhibition_title'],
            'venue_name' => $value['venue_name'],
            'room_name' => $value['room_name'],
            'start_date' => $value['start_date'],
            'end_date' => $value['end_date'],
            'room_id' => $value['room_id'],
            'exhibition_id' => $value['exhibition_id'],
            'venue_order' => $value['venue_order'],
            'date' => $given_date,
        );
    }
}

// $result now contains the desired output
print_r($result);

?>

您可以查看此链接https://onecompiler.com/php/3ztkkmvw9上的输出

Php相关问答推荐

在不刷新页面的情况下无法使用JQuery更新id

无法使用DOMPDF在PDF中呈现非ANSI字符

如何在Woocommerce中禁用机器人添加到推车?

将带有值的属性添加到WooCommerce产品,保留现有属性

WooCommerce:有条件地更改特定区域的发货类别

msgraph-sdk-php v2如何传递skiptoken到request?

使用PHP和WebSockets或SSE实现实时通知

在WooCommerce管理订单列表中显示项目总权重

Htaccess-重写对&api.php";的API请求以及对";web.php";的其他请求

按与WooCommerce管理顺序列表中的特定字符串不匹配的特定元值筛选订单

使用与OpenSSL命令行兼容的AES-256-CTR为大型文件创建php代码OpenSSL加密

为什么WooCommerce的动作钩子';woocommerce_checkout_update_order_review';包含旧信息?

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

致命错误:未捕获 Google_Exception:客户端机密 JSON 文件无效.在 /somepath/lib/vendor/google/apiclient/src/Google/Client.php

从图像URL中获取文件扩展名?

htaccess php 文件,然后是文件夹

如何使用属性创建属性预设?

htaccess 无限循环问题

基于其他数组创建多维数组 struct

根据数组中的文本文件编号显示星级