PHP开发小技巧③—实现多维数组转化为一维数组
在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常的大,造成程序的时间复杂度以及空间复杂度非常大。下面就讲述一下我是如何实现这一情况,并且代码简单明了。
实现方法:
Ⅰ 使用递归调用;
Ⅱ 首先定义一个静态数组常量用来保存结果;
Ⅲ 对多维数组进行循环;
Ⅳ 判断是否是数组,如果是递归调用方法;
Ⅴ 如果不是,将结果放入静态数组常量;
Ⅵ 返回结果(静态数组常量)。实现代码:
- <?php
- /**
- * =======================================
- * Created by Zhihua_W.
- * Author: Zhihua_W
- * Date: 2016/11/28 0003
- * Time: 上午 9:11
- * Project: PHP开发小技巧
- * Power: 实现多维数组转化为一维数组
- * =======================================
- */
- /**
- * 多维数组转化为一维数组
- * @param array $array 多维数组
- * @return array $result_array 一维数组
- */
- function array_multi2single($array)
- {
- //首先定义一个静态数组常量用来保存结果
- static $result_array = array();
- //对多维数组进行循环
- foreach ($array as $value) {
- //判断是否是数组,如果是递归调用方法
- if (is_array($value)) {
- array_multi2single($value);
- } else //如果不是,将结果放入静态数组常量
- $result_array [] = $value;
- }
- //返回结果(静态数组常量)
- return $result_array;
- }
- $arr = array(
- array(
- 'name' => 'a',
- 'sex' => 'm',
- 'sort' => 5
- ),
- array(
- 'name' => 'c',
- 'sex' => 'm',
- 'sort' => 8
- ),
- array(
- 'name' => 'g',
- 'sex' => 'm',
- 'sort' => 3
- ),
- array(
- 'name' => 'e',
- 'sex' => 'w',
- 'sort' => 6
- ),
- array(
- 'name' => 'b',
- 'sex' => 'w',
- 'sort' => 2
- ),
- );
- print_r(array_multi2single($arr));
- ?>
打印结果,实现多维数组转化为一维数组:
- Array
- (
- [0] => a
- [1] => m
- [2] => 5
- [3] => c
- [4] => m
- [5] => 8
- [6] => g
- [7] => m
- [8] => 3
- [9] => e
- [10] => w
- [11] => 6
- [12] => b
- [13] => w
- [14] => 2
- )
- 本文已收录于以下专栏:
- PHP开发小技巧
PHP开发小技巧③—实现多维数组转化为一维数组的更多相关文章
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- 二维数组转化为一维数组 contact 与apply 的结合
将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...
- 题目要求:传入数组 内容为[['lisi','男','27'],['wangwu','男',18],['zhaoliu','男','30']],将此二维数组转化为一维数组,创建自定义函数完成
//自定义函数 function getOne($arr){ $str = ''; //定义空的字符串,用来接收值 foreach ($arr as $key=>$value){ //循环遍历数 ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- Windows统一平台: 开发小技巧
Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...
- flex开发小技巧集锦
关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...
- 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/ ...
- 移动Web开发小技巧
移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用 ...
- BizTalk开发小技巧
BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...
随机推荐
- IdentityServer4 中文文档 -8- (快速入门)设置和概览
IdentityServer4 中文文档 -8- (快速入门)设置和概览 原文:http://docs.identityserver.io/en/release/quickstarts/0_overv ...
- AngularJS+Ionic开发-2.项目结构介绍
使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...
- JS 上传图片 + 预览功能(二)
简单粗暴 直接进入主题: Html <script src="../js/jquery-2.1.1.min.js"></script> <style& ...
- C#时间格式转换为时间戳互转
/// <summary> /// 将 DateTime时间格式转换为Unix时间戳格式 /// </summary> /// <param name="tim ...
- Java基础回顾Application(一)
Java Web 中application(应用级) session(会话级) request(请求级) 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hash ...
- linux学习笔记-目录结构(2)
2./usr的意义与内容 依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的. usr是UNIX Software Resource的缩写,即UNIX操作系统软件资源所放置的目录,而 ...
- 微信小程序地图报错——ret is not defined
刚刚在使用微信的map做地图时候 发现如下报错: 后来找了一会发现错误为经纬度写反了导致经纬度超出了范围 正确取值范围: latitude 纬度 浮点数,范围 -90 ~ 90 longitud ...
- Redis 入门 安装 命令
win7 64位安装redis 及Redis Desktop Manager使用 引自:http://blog.csdn.net/joyhen/article/details/47358999 写基于 ...
- Visualforce控制器
Visualforce框架是遵循MVC结构的.Visualforce页面代表了"视图"部分,Salesforce的各种对象代表了"模型"部分,而Apex则代表了 ...
- PyCharm实现高效远程调试代码
PyCharm实现高效远程调试代码 (薛刚强) 为方便Python代码学习和项目开发,目前选择专业的 IDE 开发工具 ,如 PyCham.针对个人使用的技巧做个笔记,分享给大家,有描述 ...