2015-09-25 1 views
1

У меня возникли проблемы с попыткой получить правильные значения, но это дает мне немного боли, чтобы сделать это.Как получить правильные значения в php foreach, используя 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); 
Смежные вопросы