Сопоставьте значение массива с другим многомерным массивом, а затем получите значения из многомерного массива - PullRequest
1 голос
/ 13 февраля 2020

Я хочу сопоставить значения массива 1 со значением массива 2 key DATE, и, если он найдет совпадающее значение, выведите значение MIN_TIME

Массив 1:

array:13 [
  0 => 2020-02-13
  1 => 2020-02-12
  2 => 2020-02-11
  3 => 2020-02-10
  4 => 2020-02-09
  5 => 2020-02-08
  6 => 2020-02-07
  7 => 2020-02-06
  8 => 2020-02-05
  9 => 2020-02-04
  10 => 2020-02-03
  11 => 2020-02-02
  12 => 2020-02-01
]

Массив 2:

array:8 [▼
  0 => {#1192 ▼
    +"USERID": "59"
    +"DATE": "2020-02-13"
    +"MAX_TIME": "17:11:14.0000000"
    +"MIN_TIME": "10:01:55.0000000"
  }
  1 => {#1194 ▼
    +"USERID": "59"
    +"DATE": "2020-02-12"
    +"MAX_TIME": "18:12:20.0000000"
    +"MIN_TIME": "14:08:25.0000000"
  }
  2 => {#1195 ▼
    +"USERID": "59"
    +"DATE": "2020-02-11"
    +"MAX_TIME": "18:22:09.0000000"
    +"MIN_TIME": "15:40:56.0000000"
  }
  3 => {#1196 ▼
    +"USERID": "59"
    +"DATE": "2020-02-10"
    +"MAX_TIME": "16:47:15.0000000"
    +"MIN_TIME": "14:07:19.0000000"
  }
  4 => {#1197 ▼
    +"USERID": "59"
    +"DATE": "2020-02-07"
    +"MAX_TIME": "16:29:40.0000000"
    +"MIN_TIME": "08:39:38.0000000"
  }
  5 => {#1198 ▶}
  6 => {#1199 ▶}
  7 => {#1200 ▶}
]

Мой ожидаемый результат:

Date    Date From DB    Time
2/13/2020   2/13/2020   10:01:55 AM
2/12/2020   2/12/2020   2:08:25 PM
2/11/2020   2/11/2020   3:40:56 PM
2/10/2020   2/10/2020   2:07:19 PM
2/9/2020        Not Found
2/8/2020        Not Found
2/7/2020    2/7/2020    8:39:38 AM

Я искал в Google и попробовал все решения, но не смог. Не могли бы вы, ребята, помогите мне.

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы можете использовать Laravel Коллекции для достижения этого:

$result = collect($array1)
    ->mapWithKeys(function ($item) {
        return [$item => null];
    })
    ->merge(
        collect($array2)->pluck('MIN_TIME', 'DATE')
    )
    ->toArray();

/* Output:
[
    2020-02-13 => 10:01:55.0000000
    2020-02-12 => 14:08:25.0000000
    2020-02-11 => 15:40:56.0000000
    2020-02-10 => 14:07:19.0000000
    2020-02-09 => null
    2020-02-08 => null
    2020-02-07 => 08:39:38.0000000
]
*/

Вы можете использовать map или transform, чтобы получить ожидаемый результат:

$result = collect($array1)
    ->mapWithKeys(function ($item) {
        return [$item => null];
    })
    ->merge(
        collect($array2)->pluck('MIN_TIME', 'DATE')
    )
    ->map(function ($item, $key) {
        return [
            'Date' => $key,
            'Time' => $item
        ];
    })
    ->toArray();
0 голосов
/ 13 февраля 2020

В приведенном ниже коде мы сделали для l oop первого элемента массива, который вы показываете в вопросе. А затем сопоставьте свою коллекцию с первым, где. И распечатайте свою таблицу

...