array_map()+create_function()

August 28th, 2008 by Dream☆Wing Leave a reply »

在查询数据时习惯用SELECT *把所有数据都取出来扔到一个二维数组里
这样一来如果要取数据中具体某个值组成的数组的话一般是foreach出来扔到一个新数组里

例如数组$userarr = array(
array(’uid’=>1,’username’='dreamwing’),
array(’uid’=>2,’username’='cherry’)
);

要取得uid的集合的话,一般是foreach出来扔到一个新数组里。

写多了就回想有没其他方法来实现,数组的函数还是很多的
其中array_map()函数可以用回调函数处理数组的单元

这样
function return_uid($user)
{
return $user['uid'];
}
$uidarr = array_map(’return_uid’,$userarr);
即可

当然,与foreach相比,哪种写法效率高有时间再测试下

不过,如果可以像JQuery那样在第一个$param里定义函数多美…..

既然用都用了,那么多了解点array_map()这个函数吧

官网有几个例子:
1.同上
2.函数有N个参数,array_map()可以传N个数组.The number of parameters that the callback function accepts should match the number of arrays passed to the array_map()
3.有点意思的使用方式,当回调函数$callback为null时,就回构造出一个数组的数组(传一个数组进去则返回相等的数组,传多个数组的话则返回1二维数组,以每个数组的同一键值组成的数组作为其的一个值)
4.如果传入的数组包含字符串键名时(associative),当且仅当只传入一个数组时,返回的数组也会包含对应的字符串键名;如果传入多个数组的话,则永远是数字键名(XX数组?)

在官网有人举了个例子,用到了create_function()函数,借过来可以这样
$callback = create_function(’$uarr’,'return $uarr[\'uid\'];’);
$uidarr = array_map($callback,$userarr);

注:1.create_function()生成一匿名的函数(lambda?-style),返回函数名或者FALSE
2.一般参数用单引号以达到不解析变量的目的

当然,用array_map()来处理一些问题还是很方便的,比如搜索结果关键词高亮等等,再适当配合下create_function()就更简洁了

  • Share/Save/Bookmark
Advertisement
Post comment as twitter logo facebook logo
Sort: Newest | Oldest