用键递归替换空数组

问题描述 投票:0回答:3

我想转换这个数组

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] =>数组

但是

[2] => 2

如果它是一个具有 1 个或更多子级的数组,那么它将是

[4] => Array([12]=>12

输入数据是

$a = array(
    2 => array(),
    4 => array(
        12 => array(),
        13 => array(
            16 => array()
        )
    ),
    5 => array(),
    10 => array(),
    14 => array()
);
php arrays recursion
3个回答
5
投票
foreach($ary as $k => $v)
  $result[$k] = $v ? array_keys($v) : $k;

未经测试


1
投票

函数重构($a){
  $结果=数组();
  foreach($a 为 $k => $v)
    $结果[$k] = (is_array($v) && 计数($v) > 0) ?重构($v):$k;
  返回$结果;
}

$a = 数组(2 => 数组(), 4 => 数组(12 => 数组(), 13 => 数组()), 5 => 数组(), 10 => 数组(), 14 =>大批()); 打印_r($a); $b = 重构($a); print_r($b);

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

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

函数重构($a, $rootNode = false){
  $结果=数组();
  foreach($a 为 $k => $v){
      if($rootNode){
          $结果[$k] = (is_array($v) && 计数($v) > 0) ?重构($v):$k;
      }别的{
          $结果[] = (is_array($v) && 计数($v) > 0) ?重构($v):$k;      
      }
  }
  返回$结果;
}

$a = 数组(2 => 数组(), 4 => 数组(12 => 数组(), 13 => 数组(16 => 数组())), 5 => 数组(), 10 => 数组( ), 14 => 数组());
打印_r($a);
$b = 重构($a, true);
print_r($b);

0
投票
<?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) ;

?>
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.