0

私はこの問題を理解するのに最も苦労していて、答えを見つけることができないようです。

これが私がやろうとしていることです:私はセクションに応じて私のウェブサイトに異なるナビゲーションメニューを持っています。私はすでにさまざまなバリエーションを事前に作成しており、各ページで$ linkbox_arrayを宣言しています。これは、そのページのナビゲーションメニューのリンクの配列です。特定のページでは水平に表示し、他のページでは垂直に表示します。垂直の場合、積み重ねられたリンクボックスの下部に免責事項を追加する必要があります。

したがって、私の関数はこれを言おうとしています。$linkbox_arrayが$general_linkboxesで、$bodyClassが"withSidebar"の場合、配列アイテム2の後に免責事項をエコーアウトします。それ以外の場合は、配列アイテムをエコーアウトします。

だからこれは私が書いたものです(それがひどい場合は許してください、私はこれに不慣れです):

function display_linkboxes($array) {
    if ($linkbox_array == $general_linkboxes && $bodyClass = "withSidebar") {
        foreach ($array as $linkbox) {
            if ($linkbox == $array[2]) {
                echo $linkbox;
                global $general_disclaimer;
                echo $general_disclaimer;
            } else { 
                echo $linkbox;  
            } 
        }
    } else {
        foreach ($array as $linkbox) {
            echo $linkbox;  
        }
    }
}

問題は、2つの条件が真でない場合でも、$general_disclaimerを吐き出し続けることです。関数を分解して、どこが間違っているのかを突き止めようとしましたが、ジバーリッシュを入れても、ifステートメントは常にtrueと評価されることに気付きました。例えば:

function display_linkboxes($array) {
    if ($linkbox_array == $askjfdalfjk) {
        foreach ($array as $linkbox) {
            echo $linkbox;
        }
    }
}

これはtrueと評価され、$askjfdalfjkが存在しない場合でもリンクを表示します。次に、以下の反対の問題があります。ifステートメントがtrueと評価されたとしても、これはリンクを表示しません。

function display_linkboxes($array) {
    if ($bodyClass == "withSidebar") {
        foreach ($array as $linkbox) {
            echo $linkbox;
        }
    }
}

いったい何が間違っているのですか?!?!どんな助けでも大歓迎です!

4

3 に答える 3

0

あなたのコードでは:

function display_linkboxes($array) {
    if ($linkbox_array == $general_linkboxes && $bodyClass = "withSidebar") {
...

$ linkbox_array、$ general_linkboxes、および$ bodyClassはこの関数のスコープに含まれていません。つまり、どちらも存在しないという点で、どちらも互いに同等です。それらを変数として関数に渡すか(推奨)、コードを次のように変更する必要があります。

function display_linkboxes($array) {
    global $linkbox_array, $general_linkboxes, $bodyClass;
    if ($linkbox_array == $general_linkboxes && $bodyClass == "withSidebar") {
...

私はこの回答を編集して、$bodyClassの=->==修正を含めました

于 2013-02-20T21:24:29.580 に答える
0

条件付きの場合、リファクタリングが少し必要です。

if(($linkbox_array == $general_linkboxes) && ($bodyClass == "withSidebar")) {}

単一の「=」は代入演算であり、常にtrueと評価されます。

A ==は、探していた条件付き等しい操作です。

さらに、配列の同等性と順序が重要であるかどうかをチェックする場合は、同じ要素だけでなく同じ順序もチェックする「===」演算子を使用する必要があります

最後に、スコープの問題があります。リンクボックス配列がnull変数と等しいと評価されている場合、それは定義されていません。print_r()操作を使用してこれを確認できます。配列が関数の外部で定義されている場合は、それをパラメーターとして関数に渡す必要があります。

于 2013-02-20T21:25:46.223 に答える
0

おそらくあなた$linkbox_arrayがあなたの関数の外に設定した場合、あなたが...

function display_linkboxes($array) {
     global $linkbox_array; // <------ now the variable exists within the function.
     if ($linkbox_array == $askjfdalfjk) {
         foreach ($array as $linkbox) {
             echo $linkbox;
         }
     }
 }

と同じ$bodyClass

于 2013-02-20T21:26:04.210 に答える