2015-09-25 48 views
1

我在嘗試獲取正確的值時遇到了一些麻煩,但它讓我很難完成它。如何在foreach循環php中使用continue獲取正確的值;

下面我的代碼,使循環槽項目,並找到值是否符合要求和var_dump的結果,但不正確,我也寫下面的結果我需要的輸出。

$requeriment = 250; 
    $items = array(
     array(
      'id' => 12, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 13, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 14, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 15, 
      'price' => 399, // 1% 
      'quantity' => 1 
     ) 
    ); 

    $flag = false; 
    $sumItems = 0; 

    foreach($items as $item){ 
     $totalItem = $item['price'] * $item['quantity']; 

     if($totalItem >= $requeriment){ 
      if(!$flag){ 
       $flag = true; 
       $itemIds[] = array(
        '1% Disc' => $item['id'] 
       ); 
      }else if($flag){ 
       $itemIds[] = array(
        '2% Disc' => $item['id'] 
       ); 
      } 
      continue; 
     } 

     //If no product with value required lets sum until we get that amount 
     $sumItems += $item['price'] * $item['quantity']; 
     if($sumItems >= $requeriment){ 
      $itemIds[] = array(
       '1% Disc' => $item['id'] 
      ); 
      continue; 
     } 
     $itemIds[] = array(
      '2% Disc' => $item['id'] 
     ); 



    }//THE END 

    var_dump($itemIds); 

    //the result is: 
    array(4) { 
     [0]=> 
     array(1) { 
     ["2% Disc"]=> 
     int(12) 
     } 
     [1]=> 
     array(1) { 
     ["1% Disc"]=> 
     int(13) 
     } 
     [2]=> 
     array(1) { 
     ["1% Disc"]=> 
     int(14) 
     } 
     [3]=> 
     array(1) { 
     ["1% Disc"]=> 
     int(15) 
     } 
    } 

    // but what i need is: 

    array(4) { 
     [0]=> 
     array(1) { 
     ["2% Disc"]=> 
     int(12) 
     } 
     [1]=> 
     array(1) { 
     ["2% Disc"]=> 
     int(13) 
     } 
     [2]=> 
     array(1) { 
     ["2% Disc"]=> 
     int(14) 
     } 
     [3]=> 
     array(1) { 
     ["1% Disc"]=> 
     int(15) 
     } 
    } 
+0

什麼是你的問題 – peter

+0

如果你跟蹤代碼的結果是預期的。由於'$ sumItems'增加了(單向開關),除非項目本身高於要求,否則總是會得到「1%」 – MetalMichael

+0

最後你會看到代碼給我的結果和結果我需要,我的問題是我如何得到這個結果。 Thx – ndAR

回答

1

我想我做到了工作,是否需要在第二循環標誌不知道,但回報我什麼,我需要:

正如@MetalMichael提到的,也許我還需要第二循環,他是對的!

$requeriment = 250; 
    $items = array(
     array(
      'id' => 12, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 13, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 14, 
      'price' => 199, // 2% 
      'quantity' => 1 
     ), 
     array(
      'id' => 15, 
      'price' => 199, // 1% 
      'quantity' => 1 
     ) 
    ); 

    $flag = false; 
    $sumItems = 0; 
    $itemIds = array(); 

    //Get if value is bigger than required. 
    foreach($items as $item){ 
     $totalItem = $item['price'] * $item['quantity']; 
     if($totalItem >= $requeriment){ 
      if(!$flag){ 
       $flag = true; 
       $itemIds[] = array(
        '1% Disc' => $item['id'] 
       ); 
      } 
     } 
     continue; 
    } 

    //If first loop get no result lets sum items and get the ids to apply the first discount 
    if(!count($itemIds) > 0){ 
     foreach($items as $item){ 
      $sumItems += $item['price'] * $item['quantity']; 
      $itemIds[] = array(
       '1% Disc' => $item['id'] 
      ); 
      if($sumItems >= $requeriment){ 
       if(!$flag){ 
        $flag = true; 
        break; 
       } 
      } 
     } 
    } 

    var_dump($itemIds);