如果满足一定条件,则移除数组



我正试图找出如何删除所有在它们之后具有一定保留id的时间戳。目前我只能根据时间戳取消设置,不能检查预约id是否存在。这是php代码片段的一部分:

$pending_prep_dates_array  = array();


$check_in_date  = get_post_meta( $resID, 'reservation_checkin_date', true );
$check_out_date = get_post_meta( $resID, 'reservation_checkout_date', true );

$check_in_prep = new DateTime($check_in_date);
$check_in_prep->sub(new DateInterval('P2D')); // P1D means a period of 1 day
$check_in_final = $check_in_prep->getTimestamp();

$check_out_prep = new DateTime($check_out_date);
$check_out_prep->add(new DateInterval('P2D')); // P1D means a period of 1 day
$check_out_final = $check_out_prep->getTimestamp();

for ($currentDate = $check_in_final; $currentDate <= $check_out_final; $currentDate += (86400)) {

$Store = $currentDate;
unset($pending_prep_dates_array[$Store]);

这是如何存储在数组在我的数据库:

: 15{我:1652054400;我:8997;我:1652140800;我:8999;我:1652227200;我:8999;我:1652313600;我:8999;我:1652400000;我:8999;我:1652486400;我:8999;我:1652572800;我:8999;我:1651536000;我:8993;我:1651622400;我:8993;我:1651708800;我:8993;我:1651795200;我:8993;我:1651881600;我:8993;我:1651968000;我:8997;我:1651363200;我:8993;我:1651449600;我:8993;}

那么澄清一下,如果预订id是8999,我如何才能只删除时间戳?

感谢

您可以遍历数据并构建一个删除ID的新数组:

<?php
$raw = 'a:15:{i:1652054400;i:8997;i:1652140800;i:8999;i:1652227200;i:8999;i:1652313600;i:8999;i:1652400000;i:8999;i:1652486400;i:8999;i:1652572800;i:8999;i:1651536000;i:8993;i:1651622400;i:8993;i:1651708800;i:8993;i:1651795200;i:8993;i:1651881600;i:8993;i:1651968000;i:8997;i:1651363200;i:8993;i:1651449600;i:8993;}';
$data = unserialize($raw);
$ids_to_remove = [8999, 8993];
$data_with_id_removed = [];
foreach ($data as $timestamp => $id) {
if (in_array($id, $ids_to_remove))
continue;

$data_with_id_removed[$timestamp] = $id;
}
var_dump($data_with_id_removed);

结果(删除id为8999和8993的所有时间戳)

array(2) {
[1652054400]=>
int(8997)
[1651968000]=>
int(8997)
}

最新更新