0

I have a form that creates 6 arrays. They are heights and widths that i need to multiple.

Array1[0] * Array2[0]
Array3[0] * Array4[0]
Array5[0] * Array6[0]

I can get the arrays to print individually but I cant get the calculation to work.

extract($_REQUEST);
if(count($_POST)!=0){
    foreach($_POST as $key=>$value){
        if(gettype($value) == "array"){
            $i=0;
            $total = array();
            foreach($picw as $key=>$width){
                $total[] = $width * $pich[$key];
                echo $total;
            }
            /*foreach($value as $v){
                $i++;
                //echo "<div>{$key}{$i}: " . ${"{$key}{$i}"} = $v . "</div>";
                ${"{$key}{$i}"} = $v;
                $pic{$i} = $picw{$i} * $pich{$i};
            }*/
        }
    }
}

Here is what the array prints:

pich=>Array pich1: 12

picw=>Array picw1: 12

hungh=>Array hungh1: 12

hungw=>Array hungw1: 12

sliderh=>Array sliderh1: 12

sliderw=>Array sliderw1: 12

EDIT: Here is the form where the names come from

<form action="windowQuoteEnd.php" method="post">
        <table>
                <td colspan="3"><b>Picture Window Quantity:</b></td>
                <td><select name="picq" id="picq" class="dynamicAdder" data-selector="#pic_dup_1">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                </select></td>
            </tr>
            <!-- DUPLICATES BASED ON THE SELECTION ABOVE - NUMBERS INCRIMENT FOR EACH ADDED SELECTION WHERE THE 1 IS NOW -->
            <tr id="pic_dup_1">
                <td><select name="pich[]" id="pich1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                    <option value="84">84</option>
                    <option value="96">96</option>
                    <option value="108">108</option>


                </select></td>
                <td> x </td>
                <td><select name="picw[]" id="picw1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                </select></td>
            </tr>
            <!-- END DUPLICATE -->
            <tr>
                <td colspan="3"><b>Single Hung Window Quantity:</b></td>
                <td><select name="shq" id="shq" class="dynamicAdder" data-selector="#hung_dup_1">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                </select></td>
            </tr>
            <!-- DUPLICATES BASED ON THE SELECTION ABOVE - NUMBERS INCRIMENT FOR EACH ADDED SELECTION WHERE THE 1 IS NOW -->
            <tr id="hung_dup_1">
                <td><select name="hungh[]" id="hungh1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                    <option value="84">84</option>
                    <option value="96">96</option>
                    <option value="108">108</option>
                    <option value="120">120</option>

                </select></td>
                <td> x </td>
                <td><select name="hungw[]" id="hungw1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                </select></td>
            </tr>
            <!-- END DUPLICATE -->
            <tr>
                <td colspan="3"><b>Patio Slider Quantity:</b></td>
                <td><select name="psq" id="psq" class="dynamicAdder" data-selector="#test_dup_1">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                </select></td>
            </tr>
            <!-- DUPLICATES BASED ON THE SELECTION ABOVE - NUMBERS INCRIMENT FOR EACH ADDED SELECTION WHERE THE 1 IS NOW -->
            <tr id="test_dup_1">
                <td><select name="sliderh[]" id="sliderh1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                    <option value="84">84</option>
                    <option value="96">96</option>
                    <option value="108">108</option>
                    <option value="120">120</option>

                </select></td>
                <td> x </td>
                <td><select name="sliderw[]" id="sliderw1">
                    <option value="12">12</option>
                    <option value="24">24</option>
                    <option value="36">36</option>
                    <option value="48">48</option>
                    <option value="60">60</option>
                    <option value="72">72</option>
                </select></td>
            </tr>
            <!-- END DUPLICATE -->
            <tr>    
                <td colspan="2"><button name="Submit" type="Submit" value="Submit">Get Quote</button></td>
            </tr>
        </table>

Here is the JQuery...

<script>
$(document).ready(function()
{
 $('.dynamicAdder').each(function(i,e)
 {
  var selector = $(e).attr('data-selector');
  var id = $(selector).attr('id');
  $(selector).addClass($(selector).attr('id')).removeAttr('id');
  $(e).attr('data-selector','.'+id);
  $(e).on('change',function()
  {
   var selector = $(this).attr('data-selector');
   var qty = $(this).val();
   var len = $(selector).length;
   for(var x=len;x<qty;x++)
   {
    var clone = $(selector).last().clone();
    $(selector).last().after(clone);
   }
   if(len>qty)
   {
    var diff = len-qty; // extra rows , delete them in the next step
    for(var y=0;y<diff;y++)
    {
     $(selector).last().remove();
    }
   }
  });
 });
});
</script>
3
  • Whats your actual $array definition is? Commented Apr 27, 2014 at 21:33
  • where are $pich and $picw coming from? Commented Apr 27, 2014 at 21:51
  • @CodeBird array names from form submit. See edit... Commented Apr 28, 2014 at 0:05

1 Answer 1

1

You can loop over the arrays first and append their zeroth value to another array; then, chunk that value into 2 and multiply each to get your results. This assumes that $_POST contains only the arrays you want to multiply and in the correct order:

$array_values = array();
foreach($_POST as $key=>$value){
    if(gettype($value) == "array"){
        $array_values[] = $value[0];
    }
}
$nested = array_chunk($array_values, 2);
$results = array();
// We know that the chunked arrays have only two values
foreach ($nested as $array) {
    $results = $array[0] * $array[1];
}

Or for the functional programming lovers:

$results = array_map(function ($array) {
    return array_reduce($array, function ($prev, $next) {
        return $prev * $next;
    }, 1);
}, array_chunk($array_values, 2);
Sign up to request clarification or add additional context in comments.

1 Comment

Fantastic! Thank you!! One more question... How can I display each set of array in separate areas? I.E. section 1: array0 * array1 section 2...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.