Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>First list what you need:</p> <ul> <li>There is 4 boxes that cannot be bigger than 10.</li> <li>There is another 4 boxes that cannot be bigger than 100.</li> <li>All boxes have to be filled in order.</li> </ul> <p>Then create a logic that accomplishes that:</p> <ul> <li>Fill first 4 boxes with 10 and minus it from member variable. If $member lower than 10, just write it to current box.</li> <li>Fill otger 4 boxes with 100 and minus it from member variable. If $member lower than 10, just write it to current box.</li> </ul> <p>As you see, this two operation is nearly same. Then you can make it one operation:</p> <ul> <li>Fill 8 boxes [if first 4 boxes = 10, else 100] and minus it from $member. If $member lower than [if first 4 boxes = 10, else 100] just write it to current box.</li> </ul> <p>Here is a few solution (there could be more):</p> <p>Php 5.3+ Solution with 2 array using Closure:</p> <pre><code>&lt;?php $member = 300; $small_boxes = array_map(function ($value) use(&amp;$member) { $return = $member &gt; 10 ? 10 : $member; $member = $member &gt; 10 ? $member - 10 : 0; return $return; }, array_fill(0, 4, 0)); $big_boxes = array_map(function ($value) use(&amp;$member) { $return = $member &gt; 100 ? 100 : $member; $member = $member &gt; 100 ? $member - 100 : 0; return $return; }, array_fill(0, 4, 0)); var_dump($small_boxes, $big_boxes); ?&gt; </code></pre> <p>Php 5.3+ solution with 1 array using Closure:</p> <pre><code>&lt;?php $member = 300; $count = 1; $boxes = array_map(function ($value) use(&amp;$member, &amp;$count) { if ($count &lt;= 4) { $return = $member &gt; 10 ? 10 : $member; $member = $member &gt; 10 ? $member - 10 : 0; } else { $return = $member &gt; 100 ? 100 : $member; $member = $member &gt; 100 ? $member - 100 : 0; } $count++; return $return; }, array_fill(0, 8, 0)); var_dump($boxes); ?&gt; </code></pre> <p>Php 5.3- solution with 2 array using foreach:</p> <pre><code>&lt;?php $member = 300; $small_boxes = $big_boxes = array_fill(0, 4, 0); foreach ($small_boxes as $key =&gt; $value) { if ($member &gt; 10) { $small_boxes[$key] = 10; $member -= 10; } else { $small_boxes[$key] = $member; $member = 0; break; } } foreach ($big_boxes as $key =&gt; $value) { if ($member &gt; 100) { $big_boxes[$key] = 100; $member -= 10; } else { $big_boxes[$key] = $member; $member = 0; break; } } var_dump($small_boxes, $big_boxes); ?&gt; </code></pre> <p>Php 5.3- solution with 1 array using foreach:</p> <pre><code>&lt;?php $member = 300; $box = array_fill(0, 8, 0); foreach ($box as $key =&gt; $value) { if ($key &lt; 4) { $box[$key] = $member &gt; 10 ? 10 : $member; $member = $member &gt; 10 ? $member - 10 : 0; } else { $box[$key] = $member &gt; 100 ? 100 : $member; $member = $member &gt; 100 ? $member - 100 : 0; } } var_dump($box); ?&gt; </code></pre> <p>Use whatever you like :)</p> <p>You just need to print it/them using foreach.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload