我正在尝试使用Codeigniter显示菜单并根据数据库值为用户授予用户权限。但它不起作用,可能是视图文件中存在的问题。我有下表。
表名:module_permission
id user_id delete add edit
1 1 0 1 1
我的控制器:
$this->load->model('mod_module_permission');
$data['permit']= $this->mod_module_permission->permission($user_id);
我的模特:
$this->db->select('*');
$this->db->from('module_permission');
$this->db->where('user_id', $user_id);
$getData = $this->db->get('');
if($getData->num_rows() > 0)
return $getData->result_array();
else
return null;
我的观点:
if ( in_array(add=>'1',$permit)) {echo "YES";} else {echo "NO";}
您能否告诉我视图文件中的哪些更改可以解决问题?
谢谢:)
答案 0 :(得分:2)
显然,问题在于in_array()函数用法
检查in_array()手册:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
第一个参数应该是字符串或其他,第二个参数是要搜索的数组。
此外,在第一个参数中你错误地尝试定义一个数组,数组结构块应该类似于:
array('key'=> 'value')
(字符串是冒号)
试试这个:
echo $tmp = ($permit == '1') ? "YES" : "NO";
或
$arr = array('key'=>'1');
echo $tmp = (in_array($permit, $arr)) ? "YES" : "NO";
答案 1 :(得分:1)
您错误地使用了in_array()
。它是in_array($needle, $haystack)
,其中$needle
是某种类型的单个变量。您应该尝试in_array('1', $permit)
(如果$permit
实际上是一个数组)。
上述答案仅适用于in_array()
是您问题的适当解决方案,当然。
答案 2 :(得分:0)
我认为您可以使用以下方法:
<?php foreach ($permit as $rows){
if ($rows['add']==1) {echo "YES";} else {echo "NO";}
} ?>
答案 3 :(得分:0)
看着你的问题。看来你不确定result_array()返回什么。在您的情况下,它将返回以下内容:
array (
array (
"id" => 1,
"user_id" => 1,
"delete" => 1,
"add" => 1,
"edit" => 1
)
)
因此,当您尝试执行in_array()时,您正在查看最外层的数组,而if语句将永远不会通过。但是,对您的问题进行简单修复就是更改您的模型并从以下位置更新此行:
return $getData->result_array();
到
return $getData->result_array()->row();
然后在你看来改变这一行:
if ( in_array(add=>'1',$permit)) {echo "YES";} else {echo "NO";}
到
if ($permit->add == 1) {echo "YES";} else {echo "NO";}
这只是使用代码获取所需结果的一种方法。