在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常的大,造成程序的时间复杂度以及空间复杂度非常大。下面就讲述一下我是如何实现这一情况,并且代码简单明了。

实现方法:

Ⅰ 使用递归调用;
                Ⅱ 首先定义一个静态数组常量用来保存结果;
                Ⅲ 对多维数组进行循环;
                Ⅳ 判断是否是数组,如果是递归调用方法;
                Ⅴ 如果不是,将结果放入静态数组常量;
                Ⅵ 返回结果(静态数组常量)。

实现代码:

  1. <?php
  2. /**
  3. * =======================================
  4. * Created by Zhihua_W.
  5. * Author: Zhihua_W
  6. * Date: 2016/11/28 0003
  7. * Time: 上午 9:11
  8. * Project: PHP开发小技巧
  9. * Power: 实现多维数组转化为一维数组
  10. * =======================================
  11. */
  12. /**
  13. * 多维数组转化为一维数组
  14. * @param array $array 多维数组
  15. * @return array $result_array 一维数组
  16. */
  17. function array_multi2single($array)
  18. {
  19. //首先定义一个静态数组常量用来保存结果
  20. static $result_array = array();
  21. //对多维数组进行循环
  22. foreach ($array as $value) {
  23. //判断是否是数组,如果是递归调用方法
  24. if (is_array($value)) {
  25. array_multi2single($value);
  26. } else  //如果不是,将结果放入静态数组常量
  27. $result_array [] = $value;
  28. }
  29. //返回结果(静态数组常量)
  30. return $result_array;
  31. }
  32. $arr = array(
  33. array(
  34. 'name' => 'a',
  35. 'sex' => 'm',
  36. 'sort' => 5
  37. ),
  38. array(
  39. 'name' => 'c',
  40. 'sex' => 'm',
  41. 'sort' => 8
  42. ),
  43. array(
  44. 'name' => 'g',
  45. 'sex' => 'm',
  46. 'sort' => 3
  47. ),
  48. array(
  49. 'name' => 'e',
  50. 'sex' => 'w',
  51. 'sort' => 6
  52. ),
  53. array(
  54. 'name' => 'b',
  55. 'sex' => 'w',
  56. 'sort' => 2
  57. ),
  58. );
  59. print_r(array_multi2single($arr));
  60. ?>

打印结果,实现多维数组转化为一维数组:

  1. Array
  2. (
  3. [0] => a
  4. [1] => m
  5. [2] => 5
  6. [3] => c
  7. [4] => m
  8. [5] => 8
  9. [6] => g
  10. [7] => m
  11. [8] => 3
  12. [9] => e
  13. [10] => w
  14. [11] => 6
  15. [12] => b
  16. [13] => w
  17. [14] => 2
  18. )
版权声明:转载时请标注http://blog.csdn.net/zhihua_w

PHP开发小技巧③—实现多维数组转化为一维数组的更多相关文章

  1. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  2. 二维数组转化为一维数组 contact 与apply 的结合

    将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...

  3. 题目要求:传入数组 内容为[['lisi','男','27'],['wangwu','男',18],['zhaoliu','男','30']],将此二维数组转化为一维数组,创建自定义函数完成

    //自定义函数 function getOne($arr){ $str = ''; //定义空的字符串,用来接收值 foreach ($arr as $key=>$value){ //循环遍历数 ...

  4. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  5. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

  6. flex开发小技巧集锦

    关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...

  7. TP开发小技巧

    TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...

  8. 移动Web开发小技巧

    移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用  ...

  9. BizTalk开发小技巧

    BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...

随机推荐

  1. [转]Entity Framework and slow bulk INSERTs

    本文转自:https://weblog.west-wind.com/posts/2013/Dec/22/Entity-Framework-and-slow-bulk-INSERTs I’ve been ...

  2. C#关键字的使用

    params object[] 用于函数多参数的定义 public static void Write(string format, params object[] arg);   explicit  ...

  3. spring boot 之 Mybatis 配置

    ############################## mybatis配置 ######################################mybatis.configuration ...

  4. 2018年你需要知道的13个JavaScript工具库

    译者按: 你可能已经用到Underscore或者Lodash.本文列举了13个常用的JavaScript工具库来提高开发效率. 原文: 11 Javascript Utility Libraries ...

  5. 【读书笔记】iOS-动态类型和动态绑定

    id是泛类型,可以用来存放各种类型的对象,使用id也就是使用“动态类型”. 动态类型,就是指,对象实际使用的是哪一个类是在执行期间确定的,而非在编译期间. 虽然id类型可以定义任何类型的对象,但是不要 ...

  6. CloudSim源代码学习——任务单元(Cloudlet)

    /* * Title: CloudSim Toolkit * Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Sim ...

  7. Linux原理总结 。。。更新中

    问题: 1.32位和64位Linux系统的区别是什么? 答:64位系统CPU运行速度快,支持更大的内存,能够更好的发挥服务器硬件的性能,提高业务效率 2.描述Linux分区的知识(包括设备名.主分区. ...

  8. JavaScript大杂烩6 - 理解JavaScript中的this

    在JavaScript开发中,this是很常用的一个关键字,但同时也是一个很容易引入bug的一个关键字,在这里我们就专门总结一下页面中可能出现的this关键字(包括几种在其他页面文件中出现的this) ...

  9. LeetCode题解之Insert into a Binary Search Tree

    1.题目描述 2.分析 插入算法. 3.代码 TreeNode* insertIntoBST(TreeNode* root, int val) { insert(root, val); return ...

  10. python第八十四天---十五周作业

    后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...