0

例 :

00:00 22-03-2017, John Wilson
08:00 22-03-2017, Gemma Arterton
16:00 22-03-2017, Arnold Plank
00:00 22-03-2017, Timmy Brouwer
08:00 22-03-2017, John Wilson                  <- names repeating
16:00 22-03-2017, Gemma Arterton

次の 30 日間の日時を生成するシフト システムを構築しています。日付の後ろにエコーされるように、さまざまな関連する名前を取得しようとしていますが、これまでのところ運がありません。名前はインタラクティブな意味で、1 つだけでなく 25 (いわば) もある可能性があります。

これは関数コードへの私の現在の呼び出しです:

$month = $shift->date_range(date("Y-m-d"), date('Y-m-d', strtotime("+30 days")), "+" . $shift_facility['facility_shift_duration'] . " hours", "Y/m/d H:i:s", $user_per_facility);

そして、これは私の機能そのものです:

public function date_range($first, $last, $step = '+1 day', $output_format = 'd/m/Y', $users)
{
    $dates   = array();
    $current = strtotime($first);
    $last    = strtotime($last);
    while ($current <= $last) {
        // Add date and time to array $dates
        $dates[] = date($output_format, $current) . ';' . $users[0]["user_id"];
        //check if we are still in range between the two dates
        $current = strtotime($step, $current);
    }
    return $dates;
}

$usersすべてのユーザーデータが含まれています。例:

array(2) {
  [0]=>
  array(5) {
    ["user_id"]=>
    string(1) "3"
    ["user_alias"]=>
    string(7) "ND12345"
    ["user_facility"]=>
    string(2) "29"
    ["user_phone"]=>
    string(5) "12345"
    ["user_name"]=>
    string(9) "Jan steen"
  }
  [1]=>
  array(5) {
    ["user_id"]=>
    string(1) "7"
    ["user_alias"]=>
    string(7) "ND68596"
    ["user_facility"]=>
    string(2) "29"
    ["user_phone"]=>
    string(11) "31115648597"
    ["user_name"]=>
    string(8) "John Doe"
  }
}

$users[0]["user_id"]; 名のみを出力しますが、交互にする必要があります (最初の例を見てください)。

私を正しい方向に向けたり、少し助けてくれるアイデアはありますか?

よろしくお願いします^^

編集:詳細

私の関数呼び出しは foreach にあります:

foreach ($facility->getfacilities() as $shift_facility) {

    $user_per_facility = $user->getusersbyFacilityId($shift_facility['facility_id']);

    if (isset($user_per_facility[0]["user_id"])) {
        //if shift count > dan db results generate new day
        $month = $shift->date_range(date("Y-m-d"), date('Y-m-d', strtotime("+30 days")),
            "+" . $shift_facility['facility_shift_duration'] . " hours", "Y/m/d H:i:s", $user_per_facility);

    }

}
4

2 に答える 2

0

人々が同じ問題に遭遇した場合:

変数を作成することでこの問題を修正し$i、var のサイズを超えた場合は、$users値 0 に戻しました (成功した行ごとにカウントアップするだけでなく)。

$i = 0;
 if ($i > count($users)-1) {
            $i = 0;
        }
        // Add date and time to array $dates
        $dates[] = date($output_format, $current) . ';' . $users[$i]["user_id"];

        //check if we are still in range between the two dates
        $current = strtotime($step, $current);
        $i++;
于 2017-03-22T11:50:47.647 に答える