Как искать идентификатор в массиве и клуб вместе в php

0

Хорошо, я серьезно застрял, я работал над объединением массивов, найдя id из массива. Я хочу найти SubjectID из массива, если он найдет, затем объединить оба массива и вычислить фактический час времени от времени и времени (рассчитать время между). мой массив. Фактический массив:

Array
(
    [eventlist] => Array
        (
            [0] => Array
                (
                    [allDay] => false
                    [id] => {83AE8778-A604-46F1-94BE-A045F2A9B548}
                    [SubjectID] => 2
                    [RoomID] => 2
                    [FromTime] => 00:30
                    [ToTime] => 01:45
                    [PlottingType] => Research
                )

            [1] => Array
                (
                    [allDay] => false
                    [id] => {2B1F7B32-6D44-4700-8C50-F030B94D41F6}
                    [RoomID] => 2
                    [FromTime] => 00:00
                    [ToTime] => 00:45
                    [PlottingType] => Research
                )

         [2] => Array
                (
                    [allDay] => false
                    [id] => {83AE8778-A604-46F1-94BE-A045F2A9B548}
                    [SubjectID] => 3
                    [RoomID] => 2
                    [FromTime] => 00:30
                    [ToTime] => 01:45
                    [PlottingType] => Admin
                )

        )

)

expected output:
Array
(
    [eventlist] => Array
        (
            [0] => Array
                (
                    [Time] => 01:15
                    [PlottingType] => Research
                )

         [2] => Array
                (
                    [Time] => 00:15
                    [PlottingType] => Admin
                )

        )

)

пожалуйста, предложите мне подходящее решение..

  • 0
    Данные вашего массива и ожидаемые выходные данные противоречивы.
Теги:
arrays
array-merge

2 ответа

0
Лучший ответ

Ну, вы должны пройти через все из них

$array; // Your array
$new_array = array(); // Empty new array
$new_array['eventlist'] = array();
foreach($array['eventlist'] as $inner) {

    if(isset($inner['SubjectID']) {
        // Work out your maths for time difference and put it into $interval
        $fromtime = new DateTime($inner['FromTime']);
        $totime   = new DateTime($inner['ToTime']);

        $interval = $fromtime->diff($totime);
        $interval = $interval->format('%H:%i');

        $new_inner = array(
            "Time" => $interval,
            "PlottingType" => $inner['PlottingType']
        );
        array_push($new_array['eventlist'], $new_inner);
    }

}

Пока непроверено. Это СЛЕДУЕТ работать с PHP 5.4+

  • 0
    Он не только хочет вычислить разницу обоих времен, но также хочет добавить все времена с одним и тем же PlottingType.
  • 0
    Это совсем не то, что он сказал. Тем не менее, пожалуйста, отформатируйте ваш грязный код на достойный стандарт.
Показать ещё 2 комментария
0

Это была моя попытка проблемы. Он хранит ключи, как в вашем примере.

$newarr = array();
$map = array();

foreach ($arr['eventlist'] as $key=>$val) 
{
  if (!isset($map[$val['PlottingType']]))
    $map[$val['PlottingType']] = $key;

  $fromTime = new DateTime($val['FromTime']);
  $toTime = new DateTime($val['ToTime']);
  $diff = $fromTime->diff($toTime);

  $type = $val['PlottingType'];

  if (!isset($newarr[$map[$val['PlottingType']]])) 
  {
    $newarr[$map[$val['PlottingType']]] = array(
      'time'=>$diff->format("%H:%i"),
      'PlottingType'=>$type
    );
  }
  else 
  {
    $oldtime = new DateTime($newarr[$map[$val['PlottingType']]]['time']);
    $newtime = $oldtime->add($diff);
    $newarr[$map[$val['PlottingType']]]['time'] = $newtime->format("H:i");
  }
}
  • 0
    Array ([0] => Array ([time] => 01:30 [PlottingType] => Research) [1] => Array ([time] => 01:30 [PlottingType] => admin)), если мой массив таким образом он объединяется в один массив и возвращается в один массив синглов, а не дает отдельный массив plottingtype. я хочу отдельный индекс массива, а не клуб. если тип печати diffrent, а затем вернуть другой массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню