我用Google搜索和搜索StackOverflow多次,读了in_array()
的整个PHP手册,但仍然坚持我认为这将是一个非常简单的任务。
所以我的config.php文件中有这个数组:
$page_access = array(
'index' => array('1', '2', '3'),
'users' => array('4', '5', '6')
);
在functions.php中,我有:
include 'config.php';
function level_access($page){
global $page_access;
if(in_array($page, $page_access)){
echo "yes";
} else {
echo "no";
}
}
level_access('index');
我希望得到“ yes”作为输出,因为那样的话我会在函数中做其他事情,但是无论如何我都会坚持“ no”输出。
我已经尝试过在函数内部print_r($page_access)
进行检查,只是检查它是否可以读取数组,并且它确实将整个数组返回给我(这意味着函数正在到达外部数组),但是每次回答时到in_array()
是否。
答案 0 :(得分:4)
index
是子数组的键,而不是其值in_array()
将在数组中查找其值,而不是其索引。
您可以改用array_key_exists()
或isset()
。使用isset()
时,请检查是否设置了数组的索引。
if (array_key_exists($page, $page_access)) {
echo "yes";
}
// Or..
if (isset($page_access[$page])) {
echo "yes";
}
isset()
将告诉您是否设置了数组的索引,并且其值不为空array_key_exists()
将明确告诉您索引是否存在于数组中,即使该值是否为空请参阅此live demo。
话虽这么说,global
关键字的使用很困难,您应该将变量作为参数传递给函数。
$page_access = array(
'index' => array('1', '2', '3'),
'users' => array('4', '5', '6')
);
function level_access($page, $page_access) {
// Either isset() or array_key_exists() will do - read their docs for more info
// if (array_key_exists($page, $page_access)) {
if (isset($page_access[$page])) {
echo "yes";
} else {
echo "no";
}
}
level_access($page, $page_access);
请参见Are global variables in PHP considered bad practice? If so, why?
答案 1 :(得分:1)
您不能对多维数组使用in_array()
函数。
相反,您可以使用array_key_exists()
来检查密钥是否存在。
function level_access($page)
{
global $page_access;
if (array_key_exists($page, $page_access)) {
echo "yes";
} else {
echo "no";
}
}
答案 2 :(得分:0)
index
只是$pages_access
数组中的键。 in_array
检查值。
要修正您的代码,请执行以下操作:
function level_access($page){
global $page_access;
if(in_array($page, array_keys($page_access))){
echo "yes";
} else {
echo "no";
}
}
答案 3 :(得分:0)
您正在使用in_array()
搜索值,但不能使用它。
宁可使用array_key_exists()
。