3个PHP多维数组转为一维数组的方法实例


Posted in PHP onMarch 13, 2014

很多时候我们需要将多维数组转成一维数组,因为我们只需要一维数组,而且一维数组使用起来更方便,在PHP中如何将多维数组转成一维数组?下面我们来看看三个多维数组转为一维数组例子:
一、使用foreach

<?php
   function arr_foreach ($arr) 
   {
      static $tmp=array();  
      if (!is_array ($arr)) 
      {
         return false;
      }
      foreach ($arr as $val ) 
      {
         if (is_array ($val)) 
         {
            arr_foreach ($val);
         } 
         else 
         {
            $tmp[]=$val;
         }
      }
      return $tmp;
   }
   $a = array(1,2=>array(3,4=>array(5,6)),7);
   print_r(arr_foreach($a));
?>

二、使用for循环,只能遍历数字下标的数组
<?php
   function arr_foreach($arr)
   {
      static $tmp=array();        for($i=0; $i<count($arr); $i++)
      {  
         if(is_array($arr[$i]))
         {  
            arr_foreach($arr[$i]);  
         }else{  
            $tmp[]=$arr[$i];  
         }  
      }  
      return $tmp;  
   } 
   //调用例子
   $a = array(1,array(3,array(5,6)),7);
   print_r(arr_foreach($a));
?>

三、使用while
/**
 * 将多维数组转为一维数组
 * @author echo
 * @link https://3water.com/
 * @param array $arr
 * @return array
 */
function ArrMd2Ud($arr) {
 #将数值第一元素作为容器,作地址赋值。
 $ar_room = &$arr[key($arr)];
 #第一容器不是数组进去转呀
 if (!is_array($ar_room)) {
  #转为成数组
  $ar_room = array($ar_room);
 }
 #指针下移
 next($arr);
 #遍历
 while (list($k, $v) = each($arr)) {
  #是数组就递归深挖,不是就转成数组
  $v = is_array($v) ? call_user_func(__FUNCTION__, $v) : array($v);
  #递归合并
  $ar_room = array_merge_recursive($ar_room, $v);
  #释放当前下标的数组元素
  unset($arr[$k]);
 }
 return $ar_room;
}

调用示例:

$arr = array(1, 2, 3 => array(1, 2, 'ar' => array(1, 2 => array('a', 'b'))), array('ar' => array(3, 4)));
print_r(ArrMd2Ud($arr));

输出:
Array
(
    [0] => 1
    [1] => 2
    [2] => 1
    [3] => 2
    [4] => 1
    [5] => a
    [6] => b
    [7] => 3
    [8] => 4
)
PHP 相关文章推荐
谈谈PHP语法(3)
Oct 09 PHP
PHP4和PHP5共存于一系统
Nov 17 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
PHP 强制下载文件代码
Oct 24 PHP
php 冒泡排序 交换排序法
May 10 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
cakephp打印sql语句的方法
Feb 13 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
php检测图片主要颜色的方法
Jul 01 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
php统计时间和内存使用情况示例分享
Mar 13 #PHP
去除php注释和去除空格函数分享
Mar 13 #PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 #PHP
zf框架的数据库追踪器使用示例
Mar 13 #PHP
zf框架的校验器InArray使用示例
Mar 13 #PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 #PHP
zf框架的registry(注册表)使用示例
Mar 13 #PHP
You might like
php中变量及部分适用方法
2008/03/27 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
PHP会话处理的10个函数
2015/08/11 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
PHP7 弃用功能
2021/03/09 PHP
js数组中如何随机取出一个值
2014/06/13 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python重新引入被覆盖的自带function
2014/07/16 Python
Python代码调试的几种方法总结
2015/04/15 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python中hashlib模块用法示例
2017/10/30 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
年终自我鉴定
2013/10/09 职场文书
初中生学习的自我评价
2013/11/14 职场文书
迎新晚会邀请函
2014/02/01 职场文书
暑期社会实践方案
2014/02/05 职场文书
学期评语大全
2014/04/30 职场文书
财务检查整改报告
2014/11/06 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
少年犯观后感
2015/06/11 职场文书