Heim >Backend-Entwicklung >PHP-Tutorial >3个PHP多维数组转为一维数组的方法实例_PHP

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

WBOY
WBOYOriginal
2016-06-01 11:55:37886Durchsuche

很多时候我们需要将多维数组转成一维数组,因为我们只需要一维数组,而且一维数组使用起来更方便,在PHP中如何将多维数组转成一维数组?下面我们来看看三个多维数组转为一维数组例子:
一、使用foreach
复制代码 代码如下:   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循环,只能遍历数字下标的数组
复制代码 代码如下:   function arr_foreach($arr)
   {
      static $tmp=array(); 

      for($i=0; $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 http://www.bitsCN.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
)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn