2016-04-12 4 views
4

私はPHPスラッグに乗ろうとしていましたが、問題が発生しました。配列に新しいエントリを追加するだけの方法を設定しようとしています。誰かがアクセスできるページ。ケース内のループをループする

これはコードです:

switch ($page) { 

// Adds the links. 
foreach ($LINKS as $linkName => $linkAdd) { 
    case $linkName: 
    require "templates/views/$linkAdd"; 
} 

// The default switch. 
default: 
    echo '404 Not Found'; 
break; 

} 

ループはswitchの内側foreachループを使用することが予想されなかったことを言って、私にエラーを与えるこの周囲またはそれはだかの方法があった場合、私は思っていましたこの方法を使用しないことにちょうどいいですか?

この方法ではループがforeachになりますか?または、これには他のタイプのループがあります。

+0

switch文の代わりにif-elseを使用できます。 –

+0

ええ、私は答えを待っていたので、私はそれを追加しました:P病気はまだ待っています、私はちょうど404リダイレクトをサポートしていません:@akshaykhale – Jek

答えて

5

foreachこのように使用することはできません。そしてあなたのコードのために、そのループの必要はありません。これははるかに簡単かもしれません。 $Linksの配列には$pageがキーとして含まれ、ファイルをインクルードするための値があります。

if(isset($LINKS[$page])) { // check if $page exists in $LINKS 
    require "templates/views/" . $LINKS[$page]; // include 
} else { 
    echo '404 Not Found'; // default case 
} 
0

あなたはそれがケース・ステートメント(またはデフォルト)内でなければならない、スイッチの直後に、foreachループを使用することはできません。代わりに、この場合

、foreachのを使用して、間違った方法であり、(array_key_existsを使用してみては):

if (!array_key_exists($page, $LINKS)) { 
    // Default case 
    echo '404 Not Found'; 
    exit; 
} 

require_once __DIR__ . '/templates/views' . $LINKS[$page]; 

いくつかの他の提案:

  • 使用単一引用符の代わりに二重引用符と使用concetation。
  • アブソリュートパターを常に使用してください(例:__DIR__)。
  • ファイルを含めるときは、常に明示的なホワイトリストを使用してください($ LINKS配列が動的に作成されないようにしてください)。
+0

'$ page'はインデックスです。この場合、 'array_key_exists'が動作します。 –

+0

ああ、あなたは正しい、申し訳ありません。 – Andreas