代码之家  ›  专栏  ›  技术社区  ›  apis17

将数组转换成另一种格式(PHP)

  •  1
  • apis17  · 技术社区  · 16 年前

    我想转换这个数组

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

    转换成这种格式

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

    有人能帮忙吗?谢谢。 [续2010年3月16日]

    它不是

    [2 ] = & Gt;数组

    但是

    〔2〕=2;

    如果它是一个包含一个子级或多个子级的数组,那么它将是 [4] => Array([12]=>12

    输入数据是

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

    3 回复  |  直到 16 年前
        1
  •  1
  •   Psytronic    16 年前

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

    $A=数组(2=>array(),4=>array(12=>array(),13=>array()),5=>array(),10=>array(),14=>array()); 打印($A); $B=重构($A); PrimtTyr($ B);

    很抱歉,没有看到您希望内部数组的键和值不相同。

    编辑:在您更新了您的问题之后,我编辑了我的函数以执行您需要的操作:

    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);
    
        2
  •  5
  •   user187291    16 年前
    foreach($ary as $k => $v)
      $result[$k] = $v ? array_keys($v) : $k;
    

    未经测试的

        3
  •  0
  •   Pavunkumar    16 年前
    <?php
    
    $arr = array ( "2" => array ( ) , "4" => array ( "12" => array () , 13 => array () , ) , 5 => array () , 10=> array () , 14 => array() );
    
    foreach ( $arr as $key => $val )
    {
    global $arr ;
    if ( empty ( $val ) )
    {
      unset($arr[$key]);
      $arr[$key]=$key;
    }
    }
    
    print_r  ( $arr) ;
    
    ?>