drmg17928 2010-03-11 09:11
浏览 32
已采纳

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

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());

  • 写回答

3条回答 默认 最新

  • dua55014 2010-03-11 09:25
    关注

    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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据