Rumah >pembangunan bahagian belakang >tutorial php >合纵连横,记录集超强处理函数array_column的升级版实现

合纵连横,记录集超强处理函数array_column的升级版实现

WBOY
WBOYasal
2016-07-25 08:48:351028semak imbas
靓点:简化操作,array_walk批处理,引用,内耗小。

应用场景:主要用来处理记录集(二维数组)
1、整合结果集(一维数组,如ids:[1,3,4,5],获奖用户名清单:['熊明','lijia','二郎神'])
2、组合键值对(一维数组,如标签:array('mysql'=>'url1','php'=>'url2'])
3 、缓存文件数据(id=>info)

注意事项:php5.5版本以作为内置函数,使用前请注意命名冲突。

From(EQPHP工具类):https://github.com/eqphp/framework/blob/master/www/class/fun.php

演示作品:http://www.eqphp.com/blog/list/
  1. //处理记录集(php5.5内置)
  2. static function array_column($data,$key='id',$column=null){
  3. $buffer=null;
  4. if ($column) {
  5. //k=>v
  6. if (strpos($column,',') === false) {
  7. foreach ($data as $value) {
  8. $buffer[$value[$key]]=$value[$column];
  9. }
  10. return $buffer;
  11. }
  12. //k=arr
  13. $field=explode(',',$column);
  14. foreach ($data as $value) {
  15. $id=$value[$key];
  16. array_walk($value,function ($v,$k) use (&$value,$field){
  17. if (!in_array($k,$field)) unset($value[$k]);
  18. });
  19. $buffer[$id]=$value;
  20. }
  21. return $buffer;
  22. }
  23. //id_arr
  24. foreach ($data as $value) {
  25. $buffer[]=$value[$key];
  26. }
  27. return $buffer;
  28. }
  29. //用法demo:
  30. //原记录集:
  31. $data=array(
  32. array('id'=>1,'name'=>'dubox','age'=>25,'girlfriend'=>'苏打绿'),
  33. array('id'=>4,'name'=>'小春子','age'=>21,'girlfriend'=>'不知道'),
  34. array('id'=>9,'name'=>'白痴','age'=>71,'girlfriend'=>'寡妇'),
  35. );
  36. $ids=array_column($data,'id');
  37. //out: array(1,4,9);
  38. $info=array_column($data,'name','girlfriend');
  39. //out: array('dubox'=>'苏打绿','小春子'=>'不知道','白痴'=>'寡妇');
  40. $cache=array_column($data,'id','name,age,girlfriend');
  41. //out: array(
  42. 1=>array('name'=>'dubox','age'=>25,'girlfriend'=>'苏打绿'),
  43. 4=>array('name'=>'小春子','age'=>21,'girlfriend'=>'不知道'),
  44. 9=>array('name'=>'白痴','age'=>71,'girlfriend'=>'寡妇'),
  45. );
复制代码


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn