检查数组中的值是否相同,如果不同,则在 php 中存储为不同的顺序

Check if values are same in array, if not store as different orders in php

我发布这个问题是因为我在这里搜索时没有得到解决方案。 这是我的问题

从查看页面提交数据后,我有一个数组,它是用户选择预订特定日期(start_date 和 end_date)的产品列表。 就像他可能在同一日期选择了 3 种不同的产品,或者在不同的开始日期和 return 日期选择了所有 3 种产品。

现在我有一个数组,其中包含用户选择的所有产品以及 start_date 和 end_date 以及其他产品相关信息。

在将这些产品存储为订单之前,我需要检查

  1. 如果多个产品有相同start_date和end_date,则变成一个订单.

  2. 如果多个产品有不同start_date和end_date,则变成不同订单.

现在我如何检查这些产品是否具有相同的 start_date 和 end_date 或不同?

例如..这是一个数组

 Array
(
[0] => Array
    (
        [product_id] => 15
        [start_date] => 2019-05-15
        [end_date] => 2019-05-16
        [status] => in_stock
    )

[1] => Array
    (
        [product_id] => 16
        [start_date] => 2019-05-15
        [end_date] => 2019-05-16
        [status] => out_of_stock
    )

[2] => Array
    (
        [product_id] => 17
        [start_date] => 2019-05-17
        [end_date] => 2019-05-18
        [status] => in_stock
    )
 )

这是 3 种不同的产品,这里有 2 种产品在同一日期预订 product_id[15,16]-> 所以它变成了 一个订单.

而另一个product_id号17成为一秒订单。

编辑...

我现在已将状态添加到数组中,假设我在同一日期有 2 个订单 product_id[15,16],现在它必须根据两个条件进行排序,

  1. 如果多个订单有相同的 start_date 和 end_date,那么它将变成单个 order/array,这是我通过使用已接受的答案实现的。

  2. 现在假设排序后我得到一个数组,其中有 2 个不同的产品,一个是 in_stock,另一个是 out_of_stock,现在应该又变成两个不同的命令了。

请给出一些解决方案,因为我被困在这里。

您可以使用相同的键按数组分组,在您的例子中是开始日期和结束日期。也许是这样的:

$data = array(); // this is your array
$result = array();
foreach ($data as $element) {
    /* this will create an array that have start and end date as the key. 
    So, order with same start and end date will be grouped as 1.*/
    $result[$element['start_date']." to ".$element['end_date']][] = $element;
}

print_r($result); // do what you want

原始代码from this answer.

array_walk() - Apply a user supplied function to every member of an array

您可以使用 array_walk 并遍历 array,将 arrays 分组到 start_date$arr 是你的数组。

$res = [];
array_walk($arr, function($v, $k) use (&$arr,&$res){
  $nextKey = array_key_exists($k+1, $arr) ? ($k+1) : '';
  if(!empty($nextKey) && 
     $v['start_date'] == $arr[$nextKey]['start_date'] &&
     $v['end_date'] == $arr[$nextKey]['end_date']
  ){
     $res[] = [$v, $arr[$nextKey]];
     unset($arr[$nextKey]);
  }else{
     $res[] = [$v];
  }  
});
echo '<pre>';
print_r($res);

总订单使用数count($res)