在PHP中使用in_array()

时间:2012-06-01 15:56:47

标签: php codeigniter

我正在尝试使用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";}

您能否告诉我视图文件中的哪些更改可以解决问题?

谢谢:)

4 个答案:

答案 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";}

这只是使用代码获取所需结果的一种方法。