<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>switch</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="control-structures.continue.html">continue</a></div> <div class="next" style="text-align: right; float: right;"><a href="control-structures.declare.html">declare</a></div> <div class="up"><a href="language.control-structures.html">Control Structures</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="control-structures.switch" class="sect1"> <h2 class="title"><em>switch</em></h2> <p class="verinfo">(PHP 4, PHP 5)</p> <p class="simpara"> The <em>switch</em> statement is similar to a series of IF statements on the same expression. In many occasions, you may want to compare the same variable (or expression) with many different values, and execute a different piece of code depending on which value it equals to. This is exactly what the <em>switch</em> statement is for. </p> <blockquote class="note"><p><strong class="note">Note</strong>: <span class="simpara"> Note that unlike some other languages, the <a href="control-structures.continue.html" class="link">continue</a> statement applies to switch and acts similar to <em>break</em>. If you have a switch inside a loop and wish to continue to the next iteration of the outer loop, use <em>continue 2</em>. </span> </p></blockquote> <blockquote class="note"><p><strong class="note">Note</strong>: <p class="para"> Note that switch/case does <a href="types.comparisons.html#types.comparisions-loose" class="link">loose comparision</a>. </p> </p></blockquote> <p class="para"> The following two examples are two different ways to write the same thing, one using a series of <em>if</em> and <em>elseif</em> statements, and the other using the <em>switch</em> statement: <div class="example" id="example-135"> <p><strong>Example #1 <em>switch</em> structure</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$i </span><span style="color: #007700">== </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"i equals 0"</span><span style="color: #007700">;<br />} elseif (</span><span style="color: #0000BB">$i </span><span style="color: #007700">== </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"i equals 1"</span><span style="color: #007700">;<br />} elseif (</span><span style="color: #0000BB">$i </span><span style="color: #007700">== </span><span style="color: #0000BB">2</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"i equals 2"</span><span style="color: #007700">;<br />}<br /><br />switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br /> case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 0"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">1</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 1"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">2</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 2"</span><span style="color: #007700">;<br /> break;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="example-136"> <p><strong>Example #2 <em>switch</em> structure allows usage of strings</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br /> case </span><span style="color: #DD0000">"apple"</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i is apple"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i is bar"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #DD0000">"cake"</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i is cake"</span><span style="color: #007700">;<br /> break;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> It is important to understand how the <em>switch</em> statement is executed in order to avoid mistakes. The <em>switch</em> statement executes line by line (actually, statement by statement). In the beginning, no code is executed. Only when a <em>case</em> statement is found with a value that matches the value of the <em>switch</em> expression does PHP begin to execute the statements. PHP continues to execute the statements until the end of the <em>switch</em> block, or the first time it sees a <em>break</em> statement. If you don't write a <em>break</em> statement at the end of a case's statement list, PHP will go on executing the statements of the following case. For example: <div class="informalexample"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br /> case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 0"</span><span style="color: #007700">;<br /> case </span><span style="color: #0000BB">1</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 1"</span><span style="color: #007700">;<br /> case </span><span style="color: #0000BB">2</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 2"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="simpara"> Here, if <var class="varname"><var class="varname">$i</var></var> is equal to 0, PHP would execute all of the echo statements! If <var class="varname"><var class="varname">$i</var></var> is equal to 1, PHP would execute the last two echo statements. You would get the expected behavior ('i equals 2' would be displayed) only if <var class="varname"><var class="varname">$i</var></var> is equal to 2. Thus, it is important not to forget <em>break</em> statements (even though you may want to avoid supplying them on purpose under certain circumstances). </p> <p class="simpara"> In a <em>switch</em> statement, the condition is evaluated only once and the result is compared to each <em>case</em> statement. In an <em>elseif</em> statement, the condition is evaluated again. If your condition is more complicated than a simple compare and/or is in a tight loop, a <em>switch</em> may be faster. </p> <p class="para"> The statement list for a case can also be empty, which simply passes control into the statement list for the next case. <div class="informalexample"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br />case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br />case </span><span style="color: #0000BB">1</span><span style="color: #007700">:<br />case </span><span style="color: #0000BB">2</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i is less than 3 but not negative"</span><span style="color: #007700">;<br /> break;<br />case </span><span style="color: #0000BB">3</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i is 3"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> A special case is the <em>default</em> case. This case matches anything that wasn't matched by the other cases. For example: <div class="informalexample"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br /> case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 0"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">1</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 1"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">2</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 2"</span><span style="color: #007700">;<br /> break;<br /> default:<br /> echo </span><span style="color: #DD0000">"i is not equal to 0, 1 or 2"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> The <em>case</em> expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless they are dereferenced to a simple type. </p> <p class="para"> The alternative syntax for control structures is supported with switches. For more information, see <a href="control-structures.alternative-syntax.html" class="link">Alternative syntax for control structures</a>. <div class="informalexample"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch (</span><span style="color: #0000BB">$i</span><span style="color: #007700">):<br /> case </span><span style="color: #0000BB">0</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 0"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">1</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 1"</span><span style="color: #007700">;<br /> break;<br /> case </span><span style="color: #0000BB">2</span><span style="color: #007700">:<br /> echo </span><span style="color: #DD0000">"i equals 2"</span><span style="color: #007700">;<br /> break;<br /> default:<br /> echo </span><span style="color: #DD0000">"i is not equal to 0, 1 or 2"</span><span style="color: #007700">;<br />endswitch;<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> It's possible to use a semicolon instead of a colon after a case like: <div class="informalexample"> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">switch(</span><span style="color: #0000BB">$beer</span><span style="color: #007700">)<br />{<br /> case </span><span style="color: #DD0000">'tuborg'</span><span style="color: #007700">;<br /> case </span><span style="color: #DD0000">'carlsberg'</span><span style="color: #007700">;<br /> case </span><span style="color: #DD0000">'heineken'</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">'Good choice'</span><span style="color: #007700">;<br /> break;<br /> default;<br /> echo </span><span style="color: #DD0000">'Please make a new selection...'</span><span style="color: #007700">;<br /> break;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="control-structures.continue.html">continue</a></div> <div class="next" style="text-align: right; float: right;"><a href="control-structures.declare.html">declare</a></div> <div class="up"><a href="language.control-structures.html">Control Structures</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>