0

I have a code where I want to avoid using a for/each loop to count the amount of points options in poll have together. Reason is, every option has different ammount of points and I want to get number of votes by counting options and points they have together and then dividing total points (votes) by those points...

I have a list of options where every option has a different amount of points. I think this is easier to understand:

  • Option 1 = 7 points
  • Option 2 = 6 points
  • Option 3 = 5 points
  • Option 4 = 4 points
  • Option 5 = 3 points
  • Option 6 = 2 points
  • Option 7 = 1 point

Is there some easy math way of getting to number of points (in this case 28) without using:

$options = array("lala", "lalala", "flflf", "qddwq", "adslalsd", "wqdqowdq", "acaca");
$points = 0; $i = 1;
foreach($options as $option){
    $points = $points + $i;
    $i++;
}
echo $points;

Or

$points = 0;
$options_num = 7;

for ($i=1; $i <= $options_num; $i++){
      $points = $points + $i;
}
echo $points;

I just want to make as small load on the server as possible, mainly when users won't be limited with amount of options they can insert and I am sure there has to be some simple math I can use, but I'm just not getting it.

8
  • Eight minus option number? I don't see where you're getting 28 from. Commented Jun 5, 2015 at 14:46
  • @RobertHarvey 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28 Commented Jun 5, 2015 at 14:51
  • There's 8 options; you need a loop. No getting around it. Don't try to optimize something before you understand whether or not it is actually causing a performance problem. Commented Jun 5, 2015 at 14:53
  • But I already mentioned that I am not limiting my users in amount of options, so there can be 100 or even more options. And then imagine thousands of users looking at results with hundreds options. I think there has to be some way of calculationg it without loops. Commented Jun 5, 2015 at 14:57
  • 1
    (n * (n + 1)) / 2 ... See Triangular Numbers. Commented Jun 5, 2015 at 15:06

1 Answer 1

1

The sum

7 + 6 + 5 + 4 + 3 + 2 + 1 = 28

Corresponds to a Triangular Number of the form

(n * (n + 1)) / 2

i.e. (7 * (7 + 1) / 2 = 28.

1
  • Hi, I forgot to tell you that in your example you have 7 * 1 instead of 7 + 1. I wanted to edit it myself, but edits have to be longer than 6 characters. Commented Jun 6, 2015 at 15:53

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.