Heim  >  Artikel  >  Backend-Entwicklung  >  合纵连横,记录集超强处理函数array_column的升级版实现

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

WBOY
WBOYOriginal
2016-07-25 08:48:351004Durchsuche
靓点:简化操作,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. );
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn