您的位置:首页 > 编程语言 > PHP开发

php函数array_map的有趣应用

2013-10-31 10:35 253 查看
array_map本身是用来遍历数组修改键值的,不过今天发现它除了可以用来修改数组以外还有个非常实用的技巧

在这样的场景中,我们有hotel_id数组

$arr_hotel_ids = array(1001,1002,1003)

通过传入$arr_hotel_ids到func1,返回了对应顺序的

$arr_hotel_name = array("h1", "h2", "h3"),

再通过传入$arr_hotel_ids到func2,返回了对应顺序的

$arr_hotel_price = array(1,2,3),

那么现在有了三个数组

$arr_hotel_price

$arr_hotel_name

$arr_hotel_price

他们的顺序是对应的,怎么样把他们合并成一个数组呢?

直觉是

foreach($arr_hotel_price as $key=>$v)

$merged_arr[] = array($v, $arr_hotel_name[$key], $arr_hotel_price[$key]);

当然代码看起来也还不太冗余~不过只是为了说明array_map的技巧,这里可以用一句话解决

$merged_arr = array_map(NULL, $arr_hotel_ids , $arr_hotel_name, $arr_hotel_price);

array_map的功能是遍历数组,使用call_back_func对每一个数组相同key进行处理后返回一个值。

如果传入的call_back_func为NULL,将不对key做任何处理直接返回合并的数组。也就能代替我们刚才的两行代码。

PS:

我觉得很多这种技巧虽然看起来很奇怪,解决的问题也不大(不过把代码从2行变为1行),

不过假如这个结果只是临时需要作为函数参数传入某个函数a(),传统的方式我们需要3行,

foreach($arr_hotel_price as $key=>$v)

$merged_arr[] = array($v, $arr_hotel_name[$key], $arr_hotel_price[$key]);

a($merged_arr);

如果使用有返回值的array_map,可以变为

a( array_map(NULL, $arr_hotel_ids , $arr_hotel_name, $arr_hotel_price));

直接使用返回值作为参数,还避免了临时变量的使用,这又是一个应用场合。

技巧虽然比较偏,但是如果能经常积累这样的技巧就可以增加不小的开发效率,而且代码可维护性也会增强不小~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: