Nano Hash - криптовалюты, майнинг, программирование

Проверьте, совпадают ли значения в массиве, если они не хранятся в виде разных порядков в php

Я публикую этот вопрос, так как не нашел решения при поиске здесь. вот мой вопрос

У меня есть массив, поступающий после отправки данных со страницы просмотра, это список продуктов, которые пользователь выбрал для бронирования определенных дат (start_date и end_date). например, он мог выбрать 3 разных продукта в одну и ту же дату или все 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, то они становятся одним заказом/массивом, чего я достиг, используя принятый ответ.

  2. Теперь предположим, что после сортировки я получаю массив, в котором у меня есть 2 разных продукта, один in_stock, а другой out_of_stock, теперь он снова должен стать двумя разными заказами.

Пожалуйста, дайте какое-нибудь решение, так как я застрял здесь.


Ответы:


1

Вы можете группировать по массиву с теми же ключами, что в вашем случае является датой начала и окончания. Может быть, что-то вроде этого:

$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

исходные коды из этого ответа.

30.04.2019
  • Спасибо, воспользуюсь и посмотрю. 30.04.2019
  • ваш ответ сработал для меня, но я отредактировал свой вопрос с еще одним требованием, не могли бы вы изучить это? 20.05.2019
  • просто добавьте в ключ стоковый статус. $результат[$элемент['start_date']. to .$element['end_date']._.$element['status']][] = $element; ключ массива будет выглядеть так: от 2019-05-15 до 2019-05-16_in_stock от 2019-05-15 до 2019-05-16_out_of_stock 28.05.2019

  • 2

    array_walk() - < strong>Применить предоставленную пользователем функцию к каждому члену массива

    Вы можете использовать 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)

    30.04.2019
  • Спасибо за ответ, но это подойдет только для start_date, я хотел для обеих дат. 30.04.2019
  • вы имеете в виду, что start_date и end_date по сравнению с другим массивом? 30.04.2019
  • @RakeshJakhar, если даты продолжаются, он показывает правильный ответ, но для дат заказа с другой строкой он отображается неправильно, например: дата начала строки 1: 07-05-19 дата начала строки 2: 08-05-19 дата начала строки 3: 07 -05-19 в этом случае строка 1 и строка 3 имеют одинаковые значения, но показывают 3 разные даты, но если я перемещу строку 3 в строку 2, она будет работать нормально, потому что она будет следующей за следующей. 07.05.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..