我有一个从$ _GET获取值的php页面,根据此值在多维数组中选择不同的值
$data =
array(
"index" => array(
"name" => "title",
"title" => "<img src = 'logo.png' alt=''>",
"fallback_html" => "main.php",
"gallery" => array("1" => "nothing")),
"gallery1" => array(
"name" => "gallery1",
"title" => "Gallery 1",
"fallback_html" => "",
"gallery" => array("1" => "jpg1.jpg","2" => "jpg2.jpg")
)
);
这是代码
if(isset($_GET['p'])){
$page = $_GET['p'];
}
else {
$page = "index";
}
echo $data[$page]['title'];
我得到的输出
Notice: Undefined index: 'index' in D:\xampp\htdocs\egliphp\index.php on line 66
如果我将$ page值更改为'index'或'gallery1',它可以正常工作
答案 0 :(得分:4)
逻辑似乎是合理的,所以它可能是一个空白&amp;非字母数字字符问题。所以我建议这样做:
$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>";
}
上面的示例显示,如果在数据源上标记类型,则在渲染时可以对每种类型执行不同的操作。如果你认为这是太多的工作,这是公平的。但是,如果没有明确区分它们,那么在数值中混合数据类型绝不是一个好主意。
答案 1 :(得分:1)
检查var_dump给你什么
var_dump(isset($_GET['p']));
但我建议您创建允许值数组
$allowed_vals = array_keys($data);
然后使用in_array()函数
if(in_array($_GET['p'], $allowed_vals )){
...
else
....
答案 2 :(得分:0)
$ data数组是否与“$ page”处理代码在同一文档中定义? (你的问题并不完全清楚)。只是为了确定,检查$ data数组是否存在并包含所请求的'index'键,通过调试它:
// Just to check if the $data array actually exists and contains the 'index' key:
print_r($data);exit();
if(isset($_GET['p']) && array_key_exists(trim($_GET['p']), $data)){
$page = trim($_GET['p']);
}
else {
$page = "index";
}
[update]根据你的最后一行,$ data数组应该存在,所以调试$ _GET数组可能是检查它是否包含'p'条目和正确值的一个好选项;
print_r($_GET);
答案 3 :(得分:0)
试试这个
$page = "$_GET['p']";