检查php foreach中的多个日期时间是否相同

时间:2018-03-09 07:04:44

标签: php arrays sorting datetime php-5.6

我想分割具有相同日期和不同日期的项目。

foreach ($cart->getAllItems() as $item)
{
$pickupDateTime = $item->getCartPickupDate().' '.$itemgetCartPickupTime(); 
$pickupDateTime = date('Y-m-d G:i:s', strtotime($pickupDateTime)) //2018-03-09 6:03:00 or 2018-03-09 21:10:00

// Split items here with same Date //

if(Dates are Same Condition){
$items_normal[]= $item->getProductId();
}else
{
//If Dates Are diffrent
$ites_special[]= $item->getProductId();
}

}

如果条件中的日期相同,则需要进行比较,而在其他部分中,日期与具有不同日期的项目相同。

看看下面的数组,在这个我有相同的日期和时间,我需要俱乐部那些有相同的日期和时间。在下面的例子中,第3个必须在第一个数组下,因为它有不同的时间,即6:05而不是6:03

    Array
(
    [1] => Array
        (
            [product_id] => 742
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0
            [splinst] => null
        )

    [2] => Array
        (
            [product_id] => 743
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0
            [splinst] => null
        )

)

Array
(
    [3] => Array
        (
            [product_id] => 744
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0.12
            [splinst] => null
        )

    [4] => Array
        (
            [product_id] => 757
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:05 AM
            [tax] => 0.25
            [splinst] => null
        )

)

2 个答案:

答案 0 :(得分:0)

您可以将键中的日期存储到数组中以对项目进行分组:

foreach ($cart->getAllItems() as $item)
{
    $pickupDateTime = $item->getCartPickupDate().' '.$itemgetCartPickupTime(); 
    $pickupDateTime = date('Y-m-d G:i:s', strtotime($pickupDateTime)) //2018-03-09 6:03:00 or 2018-03-09 21:10:00
    $items_special[$pickupDateTime][] = $item->getProductId();
}
foreach ($items_special as $date => $items) {
    if (count($items) > 1) {
        $items_normal = $items ;
        unset($items_special[$date]);
        break;
    }
}
$items_special = array_values($items_special);

因此,$items_special将如下所示:

Array
(
    [0] => Array
        (
            [product_id] => 757
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:05 AM
            [tax] => 0.25
            [splinst] => null
        )

)

$items_normal看起来像:

Array
(
    [0] => Array
        (
            [product_id] => 742
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0
            [splinst] => null
        )

    [1] => Array
        (
            [product_id] => 743
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0
            [splinst] => null
        )

    [2] => Array
        (
            [product_id] => 744
            [qty] => 1
            [date] => 03/09/2018
            [time] => 06:03 AM
            [tax] => 0.12
            [splinst] => null
        )
)

答案 1 :(得分:0)

您应该使用DateTime对象:

$pickupDateTime = $item->getCartPickupDate().' '.$itemgetCartPickupTime(); 
$pickupDateTime = new DateTime($pickupDateTime);

您可以比较彼此的两个DateTime对象:

if ($dateTimeObject1 == $dateTimeObject2) {
    // both have same date and time
}

请注意,您不应该在此使用严格比较(===),因为它会检查它是否是同一个对象,而不是DateTime是相同的。

如果您只需要比较日期并忽略可以在两个对象上调用setTime的时间,则将时间重置为0:

$dateTimeObject1->setTime(0, 0, 0);
$dateTimeObject2->setTime(0, 0, 0);
if ($dateTimeObject1 == $dateTimeObject2) {
    // both have the same date
}