Foreach在php中不起作用

时间:2013-02-01 13:04:32

标签: php foreach

我有这样的代码:

<?php

$kode ["J"]= array (20, C, D, F);
$kode ["K"]= array (50, B, G, U);
$kode ["T"]= array (70, V, W);

function kota ($start, $end){
    if (is_array($kode)) {
        foreach ($kode as $kota => $path){
            if ($kota=$end) {
                for ($i=1; $i < count ($kota); $i++){
                    $jalur=$start.$path[$i];
                }
            }
        }
        return $jalur;
    }
}
$start = "J";
$end = "T";
$hasil=kota ($start, $end);
echo "".$hasil;
?>

我希望输出为J-V-W
我不知道有什么不对,有人可以帮帮我吗?请...

5 个答案:

答案 0 :(得分:4)

语法错误

您似乎忘了使用等于运算符==

if ($kota = $end){ ... }

应该是 -

if ($kota == $end){ ... }

通过仅使用一个等号,您实际上将值分配给$kota,而不是值与<{1}}进行比较。在条件表达式中。

我不认为这是唯一造成麻烦的事情..但它肯定应该整理出来:))


可变范围

我在代码中注意到的另一件事是你在$end函数中引用了未在其范围中定义的变量。这意味着kota函数中无法访问$kota数组。您应该将kota数组传递给函数,以便可以在函数范围内使用它。 Here is some more info on variable scopes in PHP


命名约定

关于变量名选择的最后一点注意事项......您应该考虑更改变量$kota或函数$kota,以便它们的名称不相同。这将有助于提高可读性,并可能在凌晨4点整夜调试时防止出现错误;)

答案 1 :(得分:2)

在线

if ($kota=$end){

你不是在比较,而是覆盖$ kota中的值,这总是正确的。

此外,$kode在功能范围内不可用,请尝试将其添加到参数列表中,或使用global(不建议)。

答案 2 :(得分:0)

您需要将$kode作为参数传递给函数,或者在函数内调用global $kode;。我推荐前者。

此外,if ($kota=$end)必须像其他人提到的那样if ($kota==$end)

答案 3 :(得分:0)

不确定$jalur=$start;是否在正确的位置,但此脚本提供了您想要的内容:

<?php

$kode ["J"]= array (20, 'C', 'D', 'F');
$kode ["K"]= array (50, 'B', 'G', 'U');
$kode ["T"]= array (70, 'V', 'W');

function kota ($start, $end){
      global $kode;

      if(is_array($kode)){

            foreach ($kode as $kota => $path){

                  if ($kota == $end){
                        $jalur=$start;
                        for ($i=1; $i < count ($path); $i++){
                              $jalur .= "-" . $path[$i];
                        }
                  }
            }
            return $jalur;
      }
}
$start  = "J";
$end    = "T";
$hasil=kota ($start, $end);
echo $hasil;
?>

答案 4 :(得分:0)

您的代码有很多问题

  1. 正如其他人指出的那样,在if ($kota=$end) {中,您将$end分配给$kota并始终返回true,即IF子句中的代码始终执行< / p>

  2. PHP具有功能范围。简单地说,在函数内声明的变量不能在外部使用,反之亦然。使用参数将$kode传递给函数。

  3. V和其他地方使用裸字符串W$kode ["T"]= array (70, V, W);。强烈建议不要这样做,PHP会对此提出警告。

  4. 正如其他人指出的那样,$jalur=$start.$path[$i];每次都会覆盖$jalur。外循环是没有意义的。您可以使用.= append-to运算符。请注意,在使用此运算符之前,还需要初始化变量。

  5. $kota始终是代码中的字符串,因为在foreach循环中,=>符号前面的变量意味着获取数组的键,而数组键可以只能是String或整数。也就是说,for ($i=1; $i < count ($kota); $i++){没有意义,因为count($kota)不能大于1 - 你的for循环实际上永远不会运行。

  6. echo "".$hasil;

  7. 中附加带空字符串的变量显然毫无意义

    我想这就是你想要的。

    <?php
    
    $kode ["J"] = array (20, 'C', 'D', 'F');
    $kode ["K"] = array (50, 'B', 'G', 'U');
    $kode ["T"] = array (70, 'V', 'W');
    
    function kota ($kode, $start, $end){
        $jalur = $start;
        if (is_array($kode)) {
            foreach ($kode as $kota => $path){
                if ($kota == $end) {
                    for ($i = 1; $i < count($path); ++$i) {
                        $jalur .= '-' . $path[$i];
                    }
                }
            }
            return $jalur;
        }
    }
    $start = "J";
    $end = "T";
    $hasil = kota($kode, $start, $end);
    echo $hasil;
    ?>
    

    此代码为您提供以$start开头的字符串以及除$kode[$end]

    中第一个元素以外的所有其他元素