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]);
$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);
a( array_map(NULL, $arr_hotel_ids , $arr_hotel_name, $arr_hotel_price));
技巧虽然比较偏,但是如果能经常积累这样的技巧就可以增加不小的开发效率,而且代码可维护性也会增强不小~