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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
php获取文件后缀的9种方法
Mar 22 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
PHP微信H5支付开发实例
Jul 25 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
简单实用的PHP文本缓存类实例
Mar 22 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
初识Node.js
2015/03/20 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
python的构建工具setup.py的方法使用示例
2017/10/23 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
python pygame模块编写飞机大战
2018/11/20 Python
Python中按键来获取指定的值
2019/03/02 Python
如何通过python实现全排列
2020/02/11 Python
解决pip install psycopg2出错问题
2020/07/09 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
2015年班组工作总结
2015/04/20 职场文书
周一给客户的问候语
2015/11/10 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技