数组转换成另一种格式(PHP) [英] Converting arrays into another format (PHP)

查看:142
本文介绍了数组转换成另一种格式(PHP)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这个数组转换

 阵列

    [2] =>排列
        (
        )
    [4] =>排列
        (
            [12] =>排列
                (
                )
            [13] =>排列
                (
                 [16] =>排列
                    (
                    )
                )
        )
    [5] =>排列
        (
        )
    [10] =>排列
        (
        )
    [14] =>排列
        (
        )

成这种格式

 阵列

    [2] => 2
    [4] =>排列
        (
            [0] => 12
            [13] =>排列
                (
                    [0] => 16
                )
        )    [5] =>五
    [10] => 10
    [14] => 14

任何人可以帮助?谢谢。
[继续16Mar2010]

它不是


  

[2] =>阵列



  

[2] => 2


如果它与1名儿童以上的阵列,那么这将是 [4] =>阵列([12] => 12

输入数据


  

$一个=阵列(2 =>阵列(),4 =>阵列(12
  =>阵列(),13 =>阵列(16 =>阵列())),5 =>阵列(),10 =>
  阵列(),14 =>阵列());



解决方案

<击>


功能重构($ A){
  $结果=阵列();
  的foreach($ A $为K => $ V)
    $导致[$ k]的=(is_array(ⅴ)及$;&放大器;计数($ⅴ)> 0)?重构($ V):$ K表;
  返回$结果;
}

$一个=阵列(2 =>阵列(),4 =>阵列(12 =>阵列(),13 =>阵列()),5 =>阵列(),10 =>阵列(),14 =>阵列());
的print_r($ A);
$ B =重构($ A);
的print_r($ B);

不好意思,没看到你想要的内部数组不具有键和值一样。

编辑:你更新你的问题后,我编辑功能,你需要什么:


功能重构($ A,$ rootNode中= FALSE){
  $结果=阵列();
  的foreach($ A $为K => $ V){
      如果($ rootNode中){
          $结果[$ K] =(is_array($ V)&&计数($ V)> 0)?重构($ V):$ K表;
      }其他{
          $结果[] =(is_array($ V)&&计数($ V)> 0)?重构($ V):$ K表;
      }
  }
  返回$结果;
}$一个=阵列(2 =>阵列(),4 =>阵列(12 =>阵列(),13 =>阵列(16 =>阵列())),5 =>阵列(),10 =>阵列( ),14 =>阵列());
的print_r($ A);
$ B =重构($ A,真正的);
的print_r($ B);

i want to convert this array

 Array
(
    [2] => Array
        (
        )
    [4] => Array
        (
            [12] => Array
                (
                )
            [13] => Array
                (
                 [16] => Array
                    (
                    )
                )
        )
    [5] => Array
        (
        )
    [10] => Array
        (
        )
    [14] => Array
        (
        )
)

into this format

Array
(
    [2] => 2
    [4] => Array
        (
            [0] => 12
            [13] => Array
                (
                    [0] => 16
                )
        )

    [5] => 5
    [10] => 10
    [14] => 14
)

can anybody help? thanks. [continued 16Mar2010]

its not

[2] =>array

but

[2] => 2

if it is an array with 1 child or more, then it would be [4] => Array([12]=>12

input data is

$a = array(2 => array(), 4 => array(12 => array(), 13 => array(16 => array())), 5 => array(), 10 => array(), 14 => array());

解决方案

function refactor($a){
  $result = array();
  foreach($a as $k => $v)
    $result[$k] = (is_array($v) && count($v) > 0) ? refactor($v) : $k;
  return $result;
}

$a = array(2 => array(), 4 => array(12 => array(), 13 => array()), 5 => array(), 10 => array(), 14 => array()); print_r($a); $b = refactor($a); print_r($b);

Sorry, didn't see that you wanted the internal array not to have the keys and values as the same.

EDIT: After you updated your question, I edited my function to do what you need:

function refactor($a, $rootNode = false){
  $result = array();
  foreach($a as $k => $v){
      if($rootNode){
          $result[$k] = (is_array($v) && count($v) > 0) ? refactor($v) : $k;
      }else{
          $result[] = (is_array($v) && count($v) > 0) ? refactor($v) : $k;      
      }
  }
  return $result;
}

$a = array(2 => array(), 4 => array(12 => array(), 13 => array(16 => array())), 5 => array(), 10 => array(), 14 => array());
print_r($a);
$b = refactor($a, true);
print_r($b);

这篇关于数组转换成另一种格式(PHP)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆