ロジックは正しいように見えるので、空白と英数字以外の文字の問題である可能性があります。だから私はこれを行うことをお勧めします:
$raw_page = preg_replace('/[^a-zA-Z0-9]+/', '', trim($_GET['p']));
if(!empty($raw_page) && array_key_exists($raw_page, $data)){
$page = $raw_page;
}
else {
$page = "index";
}
array_key_exists
また、存在しないページまたは配列インデックスに対して行われているリクエストをロジックが処理できるように、を追加しました。
編集:また、配列データに一貫性がありません。ドンアンは次のecho $data['index']['title'];
ようになります。
<img src = 'logo.png' alt=''>
しかし、実行するecho $data['gallery1']['title'];
と次のようになります。
Gallery 1
だから私はあなたもそれを解決する必要があると思います。
混合配列値スタッフに関する追加情報の編集:さて、プログラミングの観点から、配列が値に対して混合値型を持っている方法にはまだ問題があります$data['title']
。私はそれが起こるのを待っている問題として見ています。したがって、$data配列構造を次のように作り直すことをお勧めします。
$data =
array(
"index" => array(
"name" => "title",
"title" => array("type" => "image", "value" => "<img src = 'logo.png' alt=''>"),
"fallback_html" => "main.php",
"gallery" => array("1" => "nothing")),
"gallery1" => array(
"name" => "gallery1",
"title" => array("type" => "text", "value" => "Gallery 1"),
"fallback_html" => "",
"gallery" => array("1" => "jpg1.jpg","2" => "jpg2.jpg")
)
);
具体的に$data["index"]["title"]
は、画像タグのあるにこれを行いました。
"title" => array("type" => "image", "value" => "<img src = 'logo.png' alt=''>"),
そして、これ$data["gallery1"]["title"]
はテキスト文字列を持っています:
"title" => array("type" => "text", "value" => "Gallery 1"),
これは、レンダリング側でそれぞれのケースをより適切に処理するのに役立ちます。したがって、次のようなコードを作成できます。
if ($data["gallery1"]["title"]["type"] == "image") {
echo $data["gallery1"]["title"]["value"] . "<br clear="all" />";
}
else if ($data["gallery1"]["title"]["type"] == "text") {
echo "<h1>" . $data["gallery1"]["title"]["value"] . "</h1>";
}
上記の例は、データソースでタイプにタグを付けると、レンダリング時にタイプごとに異なることを実行できることを示しています。大変な作業だと感じたら、それは公平です。しかし、値にデータ型を混在させることは、それらを明確に区別するための何らかの方法がなければ、決して良い考えではありません。