0

我有这样的代码:

<?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
我不知道出了什么问题,有人可以帮助我吗?请...

4

5 回答 5

4

语法错误

看起来你忘了使用相等运算符==

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

应该 -

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

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

我不认为这是唯一在这里造成麻烦的事情..但绝对应该解决它:)


变量范围

我在您的代码中注意到的另一件事是您在kota函数中引用了未在其范围内定义的变量。这意味着该数组在函数$kota内不可访问。kota您应该将$kota数组传递给函数,以便您可以在函数范围内使用它。这是有关 PHP 中变量作用域的更多信息


命名约定

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

于 2013-02-01T13:07:25.140 回答
2

在线上

if ($kota=$end){

您不是在比较,而是在覆盖 $kota 中的值,这始终是正确的。

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

于 2013-02-01T13:08:44.703 回答
0

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

此外,if ($kota=$end)需要if ($kota==$end)像其他人提到的那样。

于 2013-02-01T13:07:44.967 回答
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;
?>
于 2013-02-01T13:16:39.477 回答
0

你的代码有很多问题

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

  2. PHP 有函数作用域。简单地说,函数内部声明的变量不能在外部使用,反之亦然。使用参数将您传递$kode到函数中。

  3. 使用裸字符串 ieVWin$kode ["T"]= array (70, V, W);等地方。强烈建议不要这样做,PHP 确实会就此发出警告。

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

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

  6. 用空字符串附加一个变量是毫无意义的,如echo "".$hasil;

我想这就是你想要的。

<?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]

于 2013-02-01T13:33:46.563 回答