【问题标题】:in_array() codeginter PHPin_array() 代码点火器 PHP
【发布时间】:2012-08-13 07:32:36
【问题描述】:

大家好,我注意到了 codeigniter 的异常

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

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

这很简单,但我想将结果作为数组返回

我也是这样

$reccs->result_array();

但现在在我的控制器中我想检查 in_array(124,$returned_array); 这不成功,因为 codeigniter 已将 id 的数组封装到一个类似这样的 v 大外部数组中

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);

有什么建议吗?

【问题讨论】:

标签: php arrays codeigniter


【解决方案1】:

如果你想检查用户是否在那里,你应该做一个计数查询。

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

if($count) {
// found
} else {
// not found
}

【讨论】:

  • noo,这是完全错误的,描述中的 124 只是我想检查用户 ID 列表的一个实例
【解决方案2】:

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

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

使用 $new_array 进行 in_array 比较

【讨论】:

    【解决方案3】:

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

    in_array(array('id' => 124),$returned_array)
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 是的,我的 IDE 说,它不兼容
      • @user1537158 抱歉,我忘记将数组传递给array_map()。立即尝试。
      • 什么是 $val ,对不起,我不关注 :(
      • @user1537158 这将是您数组中的每个子数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2011-06-04
      • 2016-01-28
      相关资源
      最近更新 更多