配列の中の値を1つずつ減らすにはどのようにすればいいのか？


ある連想配列があり、`value` = 整数型が入っています。  
この値を特定の `Key` の順番ごとに減らしていきたのですが、カッコ悪くない実装方法や効率的な方法があったら教えてください。

**コード：**

[code]

    $array = ['banana'=>3, 'orange'=>2, 'apple'=>2];
    
    //banana -> orange -> apple の順に減らしたい。
    
    $subtraction　 = 3;//減らす数
    
    for($i = 0; $i < $subtraction ; $i++ )
    {
        if ($array['banana'] > 0 && ($i === 0 ||$i === 3 ||$i === 6  )) {$array['banana']--; continue;}
        if ($array['orange'] > 0 && ($i === 1 ||$i === 4  )) {$array['orange']--;continue;}
        if ($array['apple']  > 0 && ($i === 2 ||$i === 5  )) {$array['apple']--;continue;}
    }
    
[/code]


  
  
> banana -> orange -> apple の順に減らす

の分岐条件を単純にして見ました。  
**$i_mod = $i % count($array);** は、定義された配列要素の数での余りを得ています。

[code]

    $array = ['banana'=>3, 'orange'=>2, 'apple'=>2];
    
    //banana -> orange -> apple の順に減らしたい。
    //順番を変える時は$arrayの登録順番を変える
    
    $subtraction = 3;//減らす数
    
    $array_key = [];//番号でアクセスできるように配列を作る。
    foreach($array as $key=>$value){
      $array_key[] = $key;
    }
    
    for($i = 0; $i < $subtraction; $i++ )
    {
      $i_mod = $i % count($array); //$i % 3
      $key = $array_key[$i_mod];
      if ($array[$key] > 0) {
        $array[$key]--;
      }
    }
    
[/code]

_カッコ悪と思うのは理解せずに作成しているからと思うのですが_

