tags:

views:

140

answers:

2

Hi all,

I have have an array as follows:

$row when I output the entire array it produces the following:

1. I like crisps (38) 37% 55% 8% 0%

When I echo one part of the array I get the 4 figures I am interested in.

echo "<td class='set1'>". number_format($row[6], 0) ."%</td>";

The above code outputs the following 4 numbers:

37% 55% 8% 0%

What I would like to do is simply ad the first two numbers together (i.e. 37% + 55%) and output the result (92%). Hope that helps?

I should also point out that the array contains much more information than just these four figures.

As requested: output from var_dump[6]

string(7) "36.8421" string(7) "28.9474" string(7) "39.4737" string(7) "23.6842" string(7) "28.9474" string(6) "8.0000" string(7) "23.6842" string(7) "39.4737" string(7) "11.1111" string(7) "13.8889" string(7) "11.1111" string(7) "13.8889" string(7) "17.1429" string(7) "20.0000" string(7) "28.5714" string(7) "25.7143" string(7) "34.2857" string(7) "28.5714" string(7) "28.5714" string(7) "28.5714" string(7) "20.5882" string(7) "20.5882" string(7) "11.7647" string(7) "29.4118" string(7) "17.6471" string(7) "20.5882" string(6) "3.0303" string(6) "2.9412" string(6) "3.0303" string(7) "38.2353" string(7) "12.1212" string(7) "27.2727" string(7) "18.1818" string(7) "33.3333" string(7) "34.7826" string(7) "17.3913" string(7) "30.4348" string(7) "17.3913" string(7) "17.3913" string(7) "13.0435" string(7) "30.4348" string(7) "27.2727"

Is there any way to do this?

Thanks in advance,

Homer.

Entire code - hope this helps:

if ($mysqli->multi_query($query)) {
do {
    /* store first result set */
    if ($result = $mysqli->store_result()) {
        $i = 1;
        while ($row = $result->fetch_row()) {
            if($i==1){
            echo "<tr><td class='qnum'><span class='bold'>". $row[3] .".</span></td><td class='qtext'> ". $row[4] ." (<span class='italics'>". $row[5] ."</span>)</td><td></td>";
            $i = 0;
            }

            echo "<td class='set1'>". number_format($row[6], 0) ."%</td>";
            $var =  $row[6];
        }
        echo "</tr>";
        $result->free();
    }
    /* print divider */
    //if ($mysqli->more_results()) {
      //  printf("-----------------\n");
    //}
} while ($mysqli->next_result());
}

The section where $row[6] appears is where the four firgures 37% 55% 8% 0% appear - I would like to add the first two of these figures together.

If this helps, here's the result of the SQL query

response    q1  Responses   qnum    Question_Text   Total   percentage
4           4   14          1       I like crisps   38    36.8421
3           3   21          1       I like crisps   38    55.2632
2           2   3           1       I like crisps   38    7.8947
1           NULL    0       1       I like crisps   38    0.0000

The what I'd like to do is ad the 36.8421 and 55.2632 together.

Hope this helps!

+7  A: 

I imagine you could use a combination of array_sum and array_slice:

$arr = array(1, 2, 3, 4);
echo "First sum: " . array_sum(array_slice($arr,0,2));
echo '<br />';
echo "Second sum: " . array_sum(array_slice($arr,2,3));

Output:

First sum: 3
Second sum: 7

EDIT: based on the updated question, you would need something like:

$str = "55% 23% 12% 20%";

// the below line can be omitted because of the way PHP handles conversions
$str = str_replace('%', '', $str);
$arr = split(' ', $str);
echo "First sum: " . array_sum(array_slice($arr,0,2)) . '%';
echo '<br />';
echo "Second sum: " . array_sum(array_slice($arr,2,3)) . '%';

Output:

First sum: 78%
Second sum: 32%
karim79
I can't quite seem to get this work - I think the reason is I am working on a particular part of the array $row[6] - the above example is using the whole array $arr?Unless I'm not understanding something correctly, which is very very likely!
Homer_J
@Homer_J - the above was intended as a self-contained working example. Just change `$arr` to `$row[6]` and it should be fine.
karim79
@karim79 - thanks for the note - I had tried with replacing $arr with $row[6] but it simply doesn't bring anything back, just blank.
Homer_J
@Homer_J - updated my answer.
karim79
@karim - thanks again for taking the time to reply but that doesn't work either - as I have more than just four figures stored in the array - hence that fact that I'm using $row[6] to get the fours figures from the array - but there is other stuff there as well.
Homer_J
+1  A: 

Based on the assumption that you always want to sum every two rows, you could do it as follows:

// This for-loop is intended as a replacement for your 
// innermost while-loop (rows 6-14 in your question).
// I used a for-construct because we need to count the 
// cycles, and it will do it for us.
// The condition for terminating the loop is still the same
// as in the original while-loop.

?><tr><?php
for ($rownum = 1; $row = $result->fetch_row(); $rownum++) {
    if ($rownum == 1) {
        ?>
        <td class='qnum'><span class='bold'><?php echo $row[3] ?></span></td>
        <td class='qtext'><?php echo $row[4] ?> (<span class='italics'><?php echo $row[5] ?></span>)</td><td></td>
        <?php
    }

    // Sum and display on even cycles 
    // as <N> modulo 2 == 0 is true only on even numbers
    if ($rownum % 2 == 0) {
        // Display the formatted value,
        // at the same time adding the previous cycles value to this one
        ?><td class='set1'><?php echo number_format($tmp + $row[6], 0) ?>%</td><?php

    // Store the value of $row[6] on odd cycles
    } else {
        $tmp = $row[6];
    }
}
?></tr><?php
nikc
@nikc - thanks for taking the time but I'm not sure how the above would fit with my existing code - can't make sense of it I'm afraid. Looking at it it isn't going to give me what I need.
Homer_J
@Homer: it is intended as a replacement for your innermost `while` loop. I added some comments to (hopefully) clarify my meaning.
nikc