1

表示しようとしているこのコードがありますが、どのように実行しても、応答やエラーはまったく発生しません。

<?php
$day = array("Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo");
//$month[]= array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");

function today(){
    $d = date("N");
    switch ($d){
        case 1: 
            echo $day[1];
            break;
        case 2:
            echo $day[2];
            break;
        case 3:
            echo $day[3];
            break;
        case 4:
            echo $day[4];
            break;
        case 5:
            echo $day[5];
            break;
        case 6:
            echo $day[6];
            break;
        case 7:
            echo $day[7];
            break;
    }
} 
today();
?>

私が犯しているかもしれない、気づいていない明らかな間違いを誰かが見ることができますか?

4

4 に答える 4

4

追加する必要があります

global $day;

関数の上部にあります。

詳細については、PHPのマニュアルを確認してくださいvariable scoping。それに加えて、The.Anti.9が述べたように、次のことができます。

$days = array("Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo");
function today() {
    global $days;
    echo $days[date("N")-1];
}
today();
于 2009-02-07T04:16:30.697 に答える
2

まあ、私は間違いを見ませんが、あなたはただすることができます

echo $day[date('N')-1];

配列インデックスは1ではなく0から始まることを覚えておく必要があります。したがって、7がないため、$day[7]ではインデックスエラーが発生します。

編集:

パオロア・ベルガンティーノが指摘したように。$ day変数をグローバルにする必要があります。そうでない場合は、関数のスコープ内に置くことができます。

于 2009-02-07T04:14:40.343 に答える
2

date('N')曜日(1〜7)が返されるため、1ベースのインデックス配列を作成することもできます。

$day = array(1 => "Lunes","Martes","Miércoles","Jueves",
                  "Viernes","Sábado","Domingo");
echo $day[date('N')];
于 2009-02-07T04:22:22.013 に答える
2

グローバル変数の使用を避けるため(これはしばしば悪い考えです)。変数を関数に渡すだけです。

したがって、関数宣言を次のように変更します。

function today($day) 

そして最後の関数呼び出し

today($day);

2つの$dayは同じではないことに注意してください。

これfunction today($day)は、この関数内のすべての$ day変数に、この引数として渡される値が含まれることを意味します。宣言した配列ではありません。したがって、これを関数スコープ内のすべての$ daysとともに、任意の有効なphp変数名に変更でき、結果は同じままになります。

これは、前に宣言した$dayを関数にtoday($day)渡すということです。Arraytoday

于 2009-02-07T04:33:58.430 に答える