php用于嵌套循环,如果不能正常工作

时间:2014-04-28 13:24:28

标签: php

我是php的新手,我尝试制作一个简单的程序。显示ex的结果:如果数组只包含$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);

提前致谢

7 个答案:

答案 0 :(得分:0)

首先,这些循环并非真正必要。

使用php开关。

 switch($value){
   case "a":
     // Actions here
   case "b": 
     // Actions here
 }

你在for循环中所做的是用新值覆盖$ result。 最后它显示了它找到的最后一个字母。

除此之外,此代码的用途是什么。尝试寻找一个我会推荐使用Xdebug的php调试器。

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

找到了一个很好的教程和开发环境教程here

答案 1 :(得分:0)

仅使用一个循环和三个标志。试试这样的事情

$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';

答案 2 :(得分:0)

这是实现这一目标的更简单方法:

$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;

答案 3 :(得分:0)

让我们采取不同的方法:

$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;
    }
}

我所做的是检查数组中的所有字母以查看它们是否完全相同,如果不是,则将$all_the_same设置为false。要确定数组是否包含您想要的字母:

if($check==="a")
     echo "has 'a'";

或者更文明的switch / case陈述。

您的代码存在的问题是您在相同数据上运行三个循环。 $j变化非常缓慢(每个sizeof($a)平方都是准确的)并且它是您检查的第一件事,因此它总是显示出来并不奇怪&#34; c&#34;

答案 4 :(得分:0)

$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;

以下是您尝试做的更顺畅的版本!

答案 5 :(得分:0)

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

正如@GarethL提到的那样

答案 6 :(得分:0)

对于问题的意图,可能会遇到这个简单的代码

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