一旦`IF / ELSEIF`语句为真,foreach循环就不会继续

时间:2014-10-06 21:43:44

标签: php if-statement foreach

这个foreach循环似乎没有超过第一个IF语句,即使此代码段中的每个语句都为真。如何修改代码以便它继续循环遍历数组和语句?

    $Silhouettes = array('Skirt_Style-Pencil','Skirt_Style-Straight','Skirt_Style-A-Line','Skirt_Style-Full','Pant_Style-Straight'); 
    $Skirt_Style=array();
    $Pant_Style=array();

    foreach($Silhouettes as $key => $value ){
        if (in_array('Skirt_Style-Pencil', $Silhouettes)) {
           $Skirt_Style = 'Pencil';
        }elseif (in_array('Skirt_Style-Straight', $Silhouettes)) {
           $Skirt_Style = 'Straight';
        }elseif (in_array('Skirt_Style-A-Line', $Silhouettes)) {
           $Skirt_Style = 'A-Line';
        }elseif (in_array('Skirt_Style-Full', $Silhouettes)) {
           $Skirt_Style = 'Full';
        }elseif (in_array('Pant_Style-Straight', $Silhouettes)) {
           $Pant_Style = 'Straight';
        }
    }
 var_dump($Skirt_Style);

结果是:

string(6) "Pencil"

5 个答案:

答案 0 :(得分:2)

此处的权限始终为真if (in_array('Skirt_Style-Pencil', $Silhouettes)),因此您的循环永远不会到达任何else个案例。

此外,您使用字符串覆盖每个循环中的$Skirt_Style数组,而不是像这样在数组中推送字符串:$Skirt_Style[] = 'Pencil';array_push($Skirt_Style, 'Pencil');

只需用elseif语句替换所有if语句即可解决此问题。

答案 1 :(得分:1)

$Skirt_Style=array(); // create an array and put it into $Skirt_Style

$Skirt_Style = 'Pencil'; // create a string, and put it into $Skirt_Style

你的Pencil字符串会破坏/替换你创建的数组,只留下字符串。

也许你想要

$Skirt_Style[] = 'Pencil';
            ^^---

代替。 []是“array_push”的PHP快捷方式表示法。

答案 2 :(得分:1)

你覆盖了数组!

这应该有效:

    $Silhouettes = array('Skirt_Style-Pencil','Skirt_Style-Straight','Skirt_Style-A-Line','Skirt_Style-Full','Pant_Style-Straight'); 
    $Skirt_Style=array();
    $Pant_Style=array();

    if (in_array('Skirt_Style-Pencil', $Silhouettes))
       $Skirt_Style[] = 'Pencil';

    if (in_array('Skirt_Style-Straight', $Silhouettes))
       $Skirt_Style[] = 'Straight';

    if (in_array('Skirt_Style-A-Line', $Silhouettes))
       $Skirt_Style[] = 'A-Line';

    if (in_array('Skirt_Style-Full', $Silhouettes))
      $Skirt_Style[] = 'Full';

    if (in_array('Pant_Style-Straight', $Silhouettes))
       $Pant_Style[] = 'Straight';



    var_dump($Skirt_Style);

答案 3 :(得分:-1)

试试这个,对我有用。

$Silhouettes = array('Skirt_Style-Pencil','Skirt_Style-Straight','Skirt_Style-A-Line','Skirt_Style-Full','Pant_Style-Straight'); 
$Skirt_Style=array();
$Pant_Style=array();

for($x = 0; $x < count($Silhouettes);$x++){

    if ($Silhouettes[$x] == 'Skirt_Style-Pencil') {
       $Skirt_Style = 'Pencil';
    }elseif ($Silhouettes[$x] == 'Skirt_Style-Straight') {
       $Skirt_Style = 'Straight';
    }elseif ($Silhouettes[$x] == 'Skirt_Style-A-Line') {
       $Skirt_Style = 'A-Line';
    }elseif ($Silhouettes[$x] == 'Skirt_Style-Full') {
       $Skirt_Style = 'Full';
    }elseif ($Silhouettes[$x] == 'Pant_Style-Straight') {
       $Pant_Style = 'Straight';
    }
    var_dump($Skirt_Style);
}

答案 4 :(得分:-2)

摆脱else语句.. 如果你被解雇,那么else语句就不会被解雇....

$Silhouettes = array('Skirt_Style-Pencil','Skirt_Style-Straight','Skirt_Style-A-Line','Skirt_Style-Full','Pant_Style-Straight'); 
$Skirt_Style=array();
$Pant_Style=array();

foreach($Silhouettes as $key => $value ){
    if (in_array('Skirt_Style-Pencil', $Silhouettes)) {
       $Skirt_Style = 'Pencil';
    }
    if (in_array('Skirt_Style-Straight', $Silhouettes)) {
       $Skirt_Style = 'Straight';
    }
    if (in_array('Skirt_Style-A-Line', $Silhouettes)) {
       $Skirt_Style = 'A-Line';
    }
    if (in_array('Skirt_Style-Full', $Silhouettes)) {
       $Skirt_Style = 'Full';
    }
    if (in_array('Pant_Style-Straight', $Silhouettes)) {
       $Pant_Style = 'Straight';
    }
}
var_dump($Skirt_Style);

你还需要将Skirt_Style变成一个数组,否则如果被触发它就会被下一个覆盖。