1

大家好,我注意到codeigniter中的异常情况

在我的模型中,我只查询数据库以获取 user_id 列表

$recs = $this->db->query('select id from users');

这很容易,但我想将结果作为数组返回

所以我愿意

$reccs->result_array();

但现在在我的控制器中我想检查 in_array(124,$returned_array); 这不成功,因为 codeigniter 已将 id 数组封装到 av 大外部数组中,如下所示

Array ( [0] => Array ( [id] => 0 ) [1] => Array ( [id] => 11 )           [2]  =>   Array ( [id] => 29 )) 

如何使用 in_array php 函数仅检查 id ?

或者

我如何构建一个普通数组来存储 id 之类的东西

 $demo = array();
 foreach($recs as $r)
 $demo = array($r->id);

有什么建议么 ?

4

4 回答 4

2

如果您想检查用户是否在那里,您应该进行计数查询。

$this->db->where('id',124);
$count = $this->db->count_all_results('users');

if($count) {
// found
} else {
// not found
}
于 2012-08-13T07:42:41.710 回答
1

正如其他评论所说,有更好的方法可以做到这一点,但是当你坚持这样做时,只需将 id 转换为数组以匹配结果数组结构:

in_array(array('id' => 124),$returned_array)
于 2012-08-13T07:47:37.930 回答
1

您可以循环结果集并生成一个新数组并使用它。以下是可能有用的代码

$i=0;
foreach($reccs->result_array() as $values)
{
$new_array[]=$values[$i]['id'];
$i++;
}

使用 $new_array 进行 in_array 比较

于 2012-08-13T09:34:06.897 回答
0

您可以使用从每个子数组中提取该array_map()然后,in_array()将正常工作。

$found = in_array(124, 
                  array_map(function($val) { return $val['id']; },
                            $returned_array
                  )
         );

如果您没有 >= PHP 5.3,则将匿名函数替换为命名函数。

于 2012-08-13T07:33:55.360 回答