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){ ... }

等号を 1 つだけ使用することで、条件式で行う必要があるように と値を比較するのではなく、実際にに値を代入しています。$kota$end

ここで問題を引き起こしているのはこれだけではないと思います..しかし、間違いなく整理する必要があります:)


可変範囲

コードで気付いたもう 1 つのことは、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

あなたのコードには多くの問題があります

  1. 他の人が指摘したように、にif ($kota=$end) {割り当て$end$kota常に返すtrue、つまりIF句のコードは常に実行されます

  2. PHP には関数スコープがあります。簡単に言えば、関数内で宣言された変数は外部では使用できず、その逆も同様です。パラメータを使用して関数に渡します$kode

  3. むき出しの文字列の使用 ieVおよびWin$kode ["T"]= array (70, V, W);およびその他の場所。これは強く推奨され、PHP はこれについて警告します。

  4. 他の人が指摘したように、毎回$jalur=$start.$path[$i];上書きします。$jalur外側の for ループは無意味です。.=append-to 演算子を使用します。この演算子を使用する前に、変数を初期化する必要があることに注意してください。

  5. $kotaforeachループでは、=>シンボルの前の変数は配列のキーを取得することを意味し、配列のキーは文字列または整数のいずれかのみであるため、コード内では常に文字列です。つまり、1 より大きくなることはできないfor ($i=1; $i < count ($kota); $i++){ため、意味count($kota)がありません。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 に答える
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

$kode関数に引数として渡すか、global $kode;関数内で呼び出す必要があります。私は前者をお勧めします。

さらに、他の人が述べたようにif ($kota=$end)する必要があります。if ($kota==$end)

于 2013-02-01T13:07:44.967 に答える