0

これは私の新しいコードで、ほとんど機能していますが、whileループがどこか間違っていると思いますか?

以前と同じように、ユーザーを病気にさせて、それを変数に入れます。次に、勤続年数に基づいてユーザーの資格を取得し、ユーザーが取得したものを調べて、ユーザーがすべての資格をすべて使用したかどうかを確認し、半額の資格をすべて使用したかどうかを確認します。

助けてください?

if($this->CURRENT_USER['User']['role_id'] > 3) { //locks out user types

        //Get Holidaytypes
        $types = $this->Holiday->find(
            'all',
            array(
             'conditions' => array(
                                 'Holiday.holidaystype_id' => 3,
                                 'Holiday.user_id' => $id
             )));

        //Get starting date
        $contracts = $this->Holiday->User->Contract->find(
            'all',
            array(
                'conditions' => array(
                'Contract.user_id' => $id//$data['user_id']),
                'order' => array('Contract.startson' => 'ASC')
            )
        );
    //Get How Many sick days
    foreach ($types as $key => $value) {
            global $SickTotal; 
            $typesDataEnds =  strftime ("%u-%d-%Y", $types[$key]['Holiday']['endson']);
            $typesDataStarts = strftime ("%u-%d-%Y", $types[$key]['Holiday']['startson']);

            $SickTotal = count($typesDataEnds - $typesDataStarts);  
            //echo $SickTotal;

        //Get Contract Start & End Dates
        $start = array_shift($contracts);
        $end = array_pop($contracts);

        $endDate = $end['Contract']['endson'];
        $startDate = $start['Contract']['startson'];

        if (empty($endDate)) {
                $endDate = time('now');
        }
        if (!empty($startDate)) {
            $SortEnd = strftime("%Y", $endDate);
            $SortStart = strftime("%Y", $startDate);
            $YearsService = $SortEnd - $SortStart;

            if ($YearsService <= 1) {
                    $SetFullEntitlement = 5;
                    $SetHalfEntitlement = 5;
                    //echo 'one year';
            } elseif ($YearsService >= 2) {
                    $SetFullEntitlement = 10;
                    $SetHalfEntitlement = 10;
                    //echo 'two years';
            } elseif ($YearsService >= 5) {
                    $SetFullEntitlement = 20;
                    $SetHalfEntitlement = 20;
                    //echo 'up to five years';
            } elseif ($YearsService > 5) {
                    $SetFullEntitlement = 30;
                    $SetHalfEntitlement = 30;
                    //echo 'five years or more';
            } else {
                    $SetFullEntitlement = 0;
                    $SetHalfEntitlement = 0;
                    //echo 'no sick pay';
            }
        } else {
            $YearsService = 0;
            //echo 'Sorry No Start Date For You Found!';
        }

        while ($SickTotal > 0) {
            if ($SetFullEntitlement != 0) {
                $SetFullEntitlement--;
            } elseif ($SetHalfEntitlement != 0) {
                $SetHalfEntitlement--;
            }
        }

        echo 'FullPay:';
        echo $SetFullEntitlement;
        echo '<br/><br/>Halpay:';
        echo $SetHalfEntitlement;
        echo $SickTotal;
    } 

        debug($types);
        die();  
        //$this->render('/artists/holidayslist');

    }       
}
4

2 に答える 2

1
If ($startdate <= 1 year) {

それが文字通りあなたがタイプしたものである場合、それは機能しません。たぶんstrtotimeはそれをある程度理解するかもしれませんか?

とにかく、

 For ($i = $Totalsick, $i >= $Fulldays, $i--) {
    For ($i = $Totalsick, $>= $Halfdays, $i--) {

そこに$iがありません-$Halfdaysに対して何も評価していません。また、2つの別々のループに$ iを使用しているため、両方とも同じカウンターにあります。別の変数を使用するように2番目のループを切り替えます。

于 2012-06-27T09:57:35.070 に答える
0

ここであなたがやろうとしていることを正確に実行できるかどうかはわかりませんが、コードを少し整理してコード行を節約することができます。それ$startdateが何年前にユーザーが始めたのかと思います。

$sickdays= array( 0=>5, 1=>10, 2=>20, 5=>30 );
$userdays= 0;
foreach ( array_keys( $sickdays ) as $years_service )
{
   if ( $years_service <= $startdate )
      $userdays=$sickdays[$years_service];
}

$userdaysこれで、このユーザーの病欠日数と半日数が正しくなります(この例では、2つは常に同じです)。割り当てられた日数と半日よりも短いか多いかを確認するには、単純な比較で十分です。

今日はPHPを使用していないため、これを試していません。誰かが私を直接撃墜することは間違いありませんが、変数を1回設定し、行数を減らすことで、コードの保守が容易になります。

于 2012-06-27T10:12:50.597 に答える