在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多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. [JZOJ5984] 仙人掌

    Description Solution 标算我并不会... 考虑一种根号思想 首先以 \(1\) 为根dfs整棵树 那么在任意时刻一个点的儿子的权值种类最多只会有 \(\sqrt m\) 种. 可以 ...

  2. [Noip2015PJ] 求和

    Description 一条狭长的纸带被均匀划分出了 \(n\) 个格子,格子编号从 \(1\) 到 \(n\) .每个格子上都染了一种颜色 \(color_i\) 用 \([1,m]\) 当中的一个 ...

  3. MongoDB设计系列

    原创文章,如果转载请标明出处.作者. https://www.cnblogs.com/alunchen/p/9762233.html 1 前言 MongoDB作为现今流行的非关系型文档数据库,已经有很 ...

  4. WEB页获取串口数据

    最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多  大致分两种 使用ActiveX控件,JS调用MSCOMM32.dll的串口控件对串口进行控制 使用C#语言 ...

  5. angularjs小练习(分别通过ng-repeat和ng-option动态生成select下拉框)

    本次做一个简单的关于动态生成select的练习 在实现上有两种方式: 其一.通过ng-repeat来实现 其二.通过ng-option来实现 在页面效果上,两种实现的效果都一样 但是在数据选择的数据从 ...

  6. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  7. 【Spring】18、springMVC对异常处理的支持

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...

  8. jQuer插件满屏气泡飘落动画效果

    飘落动画效果插件引用: <script src="https://cdn.bootcss.com/JQuery-Snowfall/1.7.4/snowfall.jquery.min.j ...

  9. 理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法

    ajax的4种方法:$.get.$.post.$getJSON.$ajax. 1.$.get $.get()方法使用GET方式来进行异步请求,它的语法结构为: $.get( url [, data] ...

  10. 测试思想-集成测试 关于接口测试 Part1

    关于接口测试 by:授客 QQ:1033553122 接口定义 接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式. 举例 ...