PHP:如何从关联数组中删除行

问题描述 投票:0回答:1

我有一个关联数组,其中的键是日期时间类型的数据(间隔为15分钟)

    array:37 [▼
      "09:00" => Appointment {
                    #attributes: array:10 [▼
                        "id" => 1135
                        "startDateTime" => "2019-11-19 09:00:00"
                        "endDateTime" => "2019-11-19 09:45:00"
                        "duration" => 45
                    ]
                  }
      "09:15" => ""     // I want to delete this row -> 15 minutes
      "09:30" => ""     // I want to delete this row -> 30 minutes  end of the appointment
      "09:45" => ""
      "10:00" => Appointment {...duration => 60 ...}
      "10:15" => ""     // I want to delete this row -> 15 minutes
      "10:30" => ""     // I want to delete this row -> 30 minutes
      "10:45" => ""     // I want to delete this row -> 45 minutes
      "11:00" => ""     // I want to delete this row -> 60 minutes end of the appointment
      "11:15" => ""
      "11:30" => ""
      "11:45" => "" Appointment {...duration => 15 ...}
       ...
    ]

此数组将提供一张表,因此我想根据每次约会的持续时间删除后续的行。我需要它,因为我想通过以下方式将约会跨越几行:

<td class="the-appointment" rowspan="{{ $appointment->duration / 15 }}">...

因此,我需要从数组中消除后续的行。

我这样做:

    $index = -1;
    foreach ($row as  $key => $appointment) {
        if ($appointment) {
            $loops = $appointment->duration / 15;
        }
        for ($i = 1; $i < $loops; $i++) {
            unset($row[$index + 1]);
            $index++;
        }
    }

    array_push($calendar, $row);

但是由于它是一个关联数组,所以无法获取循环的索引。有什么聪明的方法可以做到这一点吗?

php loops associative-array
1个回答
0
投票

一些代码开头:

$duration = 0;
// I suggest to use array_filter and track `$duration` on each loop
$filtered = array_filter(
    $apps,
    function ($apm) use (&$duration) {
        if ($duration === 0) {
            if (!empty($apm->duration)) {
                $duration = $apm->duration - 15;
                return true;
            } else {
                return true;
            }
        } else {
            $duration -= 15;
            return false;    
        }
    }
);

正在工作的小提琴here

© www.soinside.com 2019 - 2024. All rights reserved.