php用于嵌套循环,如果不起作用

php用于嵌套循环,如果不起作用,php,Php,我是php新手,我尝试编写一个简单的程序。显示ex的结果:如果数组只包含a,$result将是a,如果b,$result将是b,如果a&b,则是ab等。在这种情况下,数组包含a、b和c,出于某种原因,当我运行时,它只显示c。 这是我的密码: $a[0] = "b"; $a[1] = "a"; $a[2] = "c"; for ($j=0; $j<sizeof($a); $j++) { for ($k=0; $k<sizeof($a); $k++) { for

我是php新手,我尝试编写一个简单的程序。显示ex的结果:如果数组只包含a,$result将是a,如果b,$result将是b,如果a&b,则是ab等。在这种情况下,数组包含a、b和c,出于某种原因,当我运行时,它只显示c。 这是我的密码:

$a[0] = "b";
$a[1] = "a";
$a[2] = "c";
for ($j=0; $j<sizeof($a); $j++) {
    for ($k=0; $k<sizeof($a); $k++) {
        for ($l=0; $l<sizeof($a); $l++) {
            if ($a[$j] == "a"){
                $result="a";
            }
            elseif ($a[$j] == "b") {
                $result="b";
            }
            elseif ($a[$j] == "c") {
                $result="c";
            }
            elseif ($a[$j] == "a" and $a[$k] == "b") {
                $result="ab";
            }
            elseif ($a[$j] == "c" and $a[$k] == "b" and $a[$l] == "a") {
                $result="abc";
            }
            elseif ($a[$j] == "b" and $a[$k] == "c") {
                $result="bc";
            }
        }
    }
}
echo ($result);

提前感谢

首先,这些循环其实并不必要

使用php开关

 switch($value){
   case "a":
     // Actions here
   case "b": 
     // Actions here
 }
在这些for循环中,您要做的是用一个新值覆盖$result。 最后,它显示了它找到的最后一个字母

除此之外,这段代码还有什么用途。尝试寻找一个php调试器,我建议使用Xdebug

调试器通过逐行进入代码并显示每个变量的状态来帮助程序员检测问题


一个好的教程和开发环境教程只使用一个循环和三个标志。试试这样的

$a[0] = "b";
$a[1] = "a";
$a[2] = "c";
$hasA = false;
$hasB = false;
$hasC = false;
for ($j=0; $j<sizeof($a); $j++) {
    if ($a[$j] == "a"){
        $hasA = true;
    }
    elseif ($a[$j] == "b"){
        $hasB = true;
    }
    elseif ($a[$j] == "c"){
        $hasC = true;
    }
}
if ($hasA) echo 'a';
if ($hasB) echo 'b';
if ($hasC) echo 'c';

以下是实现这一点的更简单方法:

$a = array('a', 'b', 'c');

$result = '';
if(in_array('a', $a)){
$result .= 'a';
}
if(in_array('b', $a)){
$result .= 'b';
}
if(in_array('c', $a)){
$result .= 'c';
}
echo $result;

让我们采取另一种方法:

$array="asdasd";
$check=$arry[0];

$all_the_same=true;

for($i=1; $i<count($array); $i++){
    if(array[$i] !== $check){
        $all_the_same=false;
        break;
    }
}
或者更文明的开关/案例陈述

代码的问题是在同一数据上运行了三个循环$精确地说,每平方$a,j的变化非常缓慢,这是你检查的第一件事,所以它总是显示c也就不足为奇了

$a[0] = "b";
$a[1] = "a";
$a[2] = "c";
$result = '';
foreach($a as $value) {
    if($value == 'a')
        $result .= 'a';
    if($value == 'b')
        $result .= 'b';
    if($value == 'c')
        $result .= 'c';
}

echo $result;
这是一个更流畅的版本,你试图做什么

sort($array);
implode( array_unique(  $array ) );

正如@GarethL所提到的

出于问题的目的,may可以满足这个简单的代码

<?php
$a[0] = "b";
$a[1] = "a";
$a[2] = "c";
$result = implode($a);
echo $result;

为什么要循环三次?如果有3个嵌套循环,则表示您做错了。它只回显c,因为您在每次循环迭代中都覆盖$result,因此它只回显$result的最后一个设置。您可以通过将所有$result=更改为$result来查看行为。您将看到当前代码生成-bbbbbbbbaaaaaaaaaaccccccccccc它们必须按字母顺序排列吗?为什么不能像sort$a;数组_唯一$a;回声内爆,$a?它只显示a。我的意思是,如果我的数组包含a、b和c,结果将是abc,就像我代码中的那样。如果在我的数组中只有a,b,它将只为你的数组显示abremovestatements@botanbutton抱歉,我修复了它,这将避免循环
<?php
$a[0] = "b";
$a[1] = "a";
$a[2] = "c";
$result = implode($a);
echo $result;