我从数据库中提取权限列表并将它们放入数组中;
while($row = mysql_fetch_assoc($get_permissions)) {
$_SESSION['permissions'][] = $row;
}
会话变量的内容如下所示;
array(2) {
[0]=> array(1) {
["permission_name"] => string(15) "acl_assets_read"
}
[1]=> array(1) {
["permission_name"] => string(16) "acl_assets_write"
}
}
下面是使用print_r的输出,这使得它更容易阅读。
Array ( [0] => Array ( [permission_name] => acl_assets_read ) [1] => Array ( [permission_name] => acl_assets_write ) )
我已经阅读过有关使用array_search的信息并认为它应该可行。我尝试使用以下内容来搜索权限;
if (array_search('acl_assets_read', $_SESSION['permissions'])) {
echo "true";
}
我遇到的问题是,即使结果存在,它也会继续返回false。语法对我来说是正确的。
答案 0 :(得分:2)
您的问题是您将整个行(它是一个自己的数组)从数据库添加到$_SESSION['permissions']
- 数组中,每次迭代数据库中的值时形成一个子数组。
这意味着$_SESSION['permissions']
中的所有值都是数组,而不是字符串。这反过来意味着您无法搜索这样的字符串。
如果您已经存储了您感兴趣的值,则在数据库中名为permissions
的列中,您只需将该元素添加到您的$_SESSION['permissions']
- 数组中,就像这样
$_SESSION['permissions'][] = $row['permissions'];
这会将该行的字符串添加到数组$_SESSION['permissions']
中的元素中。
还值得注意的是array_search()
返回数组的键,其中第一个元素的索引(键)将等于0.这意味着第一个元素你的数组看起来真的像if (0) { /* code */ }
。这将返回false(if (0) == false
),因此您应该考虑使用ìn_array()
,它返回一个布尔true/false
。
if (in_array('acl_assets_read', $_SESSION['permissions'])) {
echo "true";
}
此外,mysql_*
函数已弃用,如果可以的话,您可以stop using them。
答案 1 :(得分:0)
array_search
会对您有用,但您需要正确的array
才能搜索。
看看这个:
$arrOne = array("one", "two");
$arrTwo = array(array("one"), array("two"));
$key = array_search("one", $arrOne);
var_dump($key); // int(0) is the index of where the value was found
$key = array_search("two", $arrTwo);
var_dump($key); // bool(false) because "two" != array("one") or array("two")
请注意,第二个array_search
将返回false
,因为string
不等于array
。
如果你有:
array(2) {
[0]=> string(15) "acl_assets_read"
[1]=> string(16) "acl_assets_write"
}
而不是:
array(2) {
[0]=> array(1) {
["permission_name"] => string(15) "acl_assets_read"
}
[1]=> array(1) {
["permission_name"] => string(16) "acl_assets_write"
}
}
然后您的array_search
会找到合适的string
答案 2 :(得分:0)
这是你的答案:
$userdb = array(array("permission_name" => 'acl_assets_read'),array("permission_name" => 'acl_assets_write'));
$key = array_search("acl_assets_write", array_column($userdb, 'permission_name'));
if($key != ''){
echo 'true';
}
如果针发现$ key显示针的关键。如果没有找到针,则$ key显示为空白。