38

is it possible to do this? (here is my code)

for ($i = 0 ; $i <= 10 ; $i++){
  for ($j = 10 ; $j >= 0 ; $j--){
     echo "Var " . $i . " is " . $k . "<br>";
  }
}

I want something like this:

var 0 is 10

var 1 is 9

var 2 is 8 ...

But my code is wrong, it gives a huge list. Php guru, help me !!

7 Answers 7

79

Try this:

for ($i=0, $k=10; $i<=10 ; $i++, $k--) {
    echo "Var " . $i . " is " . $k . "<br>";
}

The two variables $i and $k are initialized with 0 and 10 respectively. At the end of each each loop $i will be incremented by one ($i++) and $k decremented by one ($k--). So $i will have the values 0, 1, …, 10 and $k the values 10, 9, …, 0.

Sign up to request clarification or add additional context in comments.

5 Comments

Oh wow. I had no idea you set multiple vars within a for-loop. Nice.
My next question: can you do this in C, C++, Java, and C#?
@Thomas, yes. C++ and C# definitely, and I'm pretty sure about C and Java, but I try to avoid it as it can get unreadable fast.
There are only rare occasions where I would want to use it, but I'm totally putting this one in my toolbelt.
Thanks for this code snippet. Didn't think that you could do something like this...
4

You could also add a condition for the second variable

for ($i=0, $k=10; $i<=10, $k>=0 ; $i++, $k--) {
    echo "Var " . $i . " is " . $k . "<br>";
}

Comments

1

You shouldn't be using two for-loops for what you'd like to achieve as you're looping 121 times total (11x11). What you really want is just to have a counter declared outside of the loop that tracks j, and then decrement j inside the loop.

Edit: Thanks Gumbo for catching the inclusion for me.

2 Comments

In fact it’s 11·11=121 (from 0 to 10 inclusive).
Ah, yes, didn't even see that.
1

If, as your code looks like, you have two values running the opposite direction you could simply substract:

echo "Var " . $i . " is " . 10 - $i . "<br>";

But I guess that's not really what you want? Also, be careful with the suggested comma operator. While it is a nice thing it can cause naughty side effects in other languages like C and C++ as PHP implements it differently.

Comments

1
array_map(function($i) {
    echo "Var {$i} is ".(10-$i)."<br/>".PHP_EOL; 
}, range(1,10));

Comments

0

To expand on the other (correct) answers, what you were doing is called nesting loops. This means that for every iteration of the outer loop (the first one), you were completing the entire inner loop. This means that instead of 11 outputs, you get 11 + 11 + 11 + ... = 11 * 11 outputs

Comments

0

I tried to get a start and end time and store in the database, given a start and end time, you loop through each time using two variables i&j

   $start = "09:00";
   $end = "18:00";
   $strEnTim = strtotime("10.00");

   $slotStart = strtotime($start);
   $slotEnd = strtotime($end);
   $slotNow = $slotStart;

   for( $i=$slotStart, $j=$strEnTim; $i, $j<=$slotEnd; $i+=3600,  $j+=3600) 
   {
        if(( $i < $slotNow) && ( $j < $strEnTim)) continue;
        Slot::create([
            'start_time' => date("H:i",$i),
            'end_time' => date("H:i", $j)
        ]);
   }

Comments

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.