妙用php中的array_filter()获取数据
2017-04-29 02:28
281 查看
这种问题一般我们常见于页面上既要用到总表,又要用到其中某个用户单条数据的情况。而常见的两种解决方法是1.两次查库取出总表和符合条件的单条数据;(在数据库的数据量不多,涉及到的表较少的情况)2.取出总表用php foreach进行循环,在循环体中判断数据是否符合条件,符合则结束循环并返回这条数据(数据量大,涉及到的数据表多且结构复杂)。是不是哪一种看起来都很麻烦,太简单粗暴不太适合我这种追求矫情美感的人。
所以在这几天做项目涉及到这种情况且查出的结果集也比较庞大的时候,我就在想,数据库中的结果集都是以二维数组的形式取出存在php变量中,那么,如果能找到一个方法将这个二维数组中符合条件的一维数组抽出,不仅能够获得我们所需要的单条数据,同时还得到了该条数据在数据集中的位置(因为是键值对的形式)。所以抱着这样的想法小小的研读了一下php关于array数组的常用函数。果然让我找到了array_filter()这个函数,完美的解决了我的问题。执行代码如下(该代码所用的数组是我上篇文章生成的,不清楚的童鞋可以翻翻我的前一篇文章,这里我就不赘述了。):
看到这里是不是有点疑惑,我们要用的时候一般array_filter 不是在php里面如此奔放的存在在全局,而是在某个function之中,那回调函数这么写就会报错了。那我们就更简单一点像下面这样把回调函数直接当初array_filter()函数的第二个参数就行:
在这里mark一下,以后需要的时候就能很快的找到。大家有好的解决方法也希望能一块交流一下。共勉。今天版本更新,我要继续加班干活了。祝大家五一节快乐哦~
所以在这几天做项目涉及到这种情况且查出的结果集也比较庞大的时候,我就在想,数据库中的结果集都是以二维数组的形式取出存在php变量中,那么,如果能找到一个方法将这个二维数组中符合条件的一维数组抽出,不仅能够获得我们所需要的单条数据,同时还得到了该条数据在数据集中的位置(因为是键值对的形式)。所以抱着这样的想法小小的研读了一下php关于array数组的常用函数。果然让我找到了array_filter()这个函数,完美的解决了我的问题。执行代码如下(该代码所用的数组是我上篇文章生成的,不清楚的童鞋可以翻翻我的前一篇文章,这里我就不赘述了。):
<?php function test_odd($var) { if($var['user_id'] == 69) return 1; else return 0; } $btb_user = $model->queryCountInfoWithUserId(); $result = array_filter($btb_user,"test_odd");//若true,,返回符合条件的单条数据 //var_dump(array_filter($btb_user,"test_odd")); //var_dump(array_keys($result)); $locate = array_keys($result); echo $locate[0];//该条数据在结果集中的位置。 ?>
看到这里是不是有点疑惑,我们要用的时候一般array_filter 不是在php里面如此奔放的存在在全局,而是在某个function之中,那回调函数这么写就会报错了。那我们就更简单一点像下面这样把回调函数直接当初array_filter()函数的第二个参数就行:
$sort_info = $model->queryCountInfoWithUserId(); $simple_sort_info = array(); $locate = 0; if($this->user_id != ''){ $simple_sort_info = array_filter($sort_info, function ($var) { if($var['user_id'] == Yii::app()->session['user_id']) return 1; else return 0; }); $locate = array_keys($simple_sort_info); if(!empty($locate)){//找到 $locate = $locate[0] + 1; $simple_sort_info = array_values($simple_sort_info); $simple_sort_info = $simple_sort_info[0]; }else{ $locate = ''; $simple_sort_info['user'] = $this->user_name; $simple_sort_info['user_id'] = $this->user_id; $simple_sort_info['total_num'] = 0; $simple_sort_info['data'] = 0; } }
在这里mark一下,以后需要的时候就能很快的找到。大家有好的解决方法也希望能一块交流一下。共勉。今天版本更新,我要继续加班干活了。祝大家五一节快乐哦~
相关文章推荐
- php 利用array_slice函数获取随机数组或前几条数据
- php 利用array_slice函数获取随机数组或前几条数据
- PHP: 使用mysql_fetch_array()来获取数据
- 使用php获取远端数据~
- 用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
- php获取表单提交的数据
- 使用mysql_fetch_array()获取当前行数据
- RealTimeArrayCollection---flex实时获取数据并以LInechart的形式显示
- php获取post中的json数据的实现方法
- 使用PHP获取Blogger博客RSS或Atom数据
- PHP获取MYSQL新插入数据的ID
- PHP面向对象之旅:获取用户数据
- PHP中array_map的妙用
- php获取post中的json数据的实现方法
- php获取post中的json数据
- 用PHP的超级变量$_GET获取HTML表单(Form) 数据
- php 获取原始数据的方法
- php 表单数据的获取代码
- (转) 在C#中使用WIA获取扫描仪数据(三、利用Filter处理图片)
- PHP学习笔记--第四章.获取数据