转换多维数组键值

时间:2016-09-26 08:10:09

标签: php arrays multidimensional-array key-value

我的数组如下: -

$x = array(
  'a' => array('aa' => array('aaa' => array(1, 2, 3))),
  'b' => array('bb' => array('bbb' => array(1, 2, 3))),
);

然后,我想将数组修改为: -

$y = array(
  1 => array('a', 'b'),
  2 => array('aa', 'bb'),
  3 => array('aaa', 'bbb'),
);

请帮助我!

注意:如果最后一个数组2,1,3为2->a,b; 1->aa,bb; 3->aaa,bbb

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

$x = array(
  'a' => array('aa' => array('aaa' => array(1, 2, 3))),
  'b' => array('bb' => array('bbb' => array(1, 2, 3))),
);

$loop=true;
$item=array();


foreach ($x as $index => $value) {
if(!is_int($index)) $item[strlen($index)][]=$index;
while($loop){
    foreach ($value as $sub_index => $sub_value) {
        if (is_array($sub_value)) {
            if(!is_int($sub_index)) $item[strlen($sub_index)][]=$sub_index;
            $value=$sub_value;

        }
        else {
            if(!is_int($sub_index))$item[strlen($sub_index)][]=$sub_index;
            $loop=false;
        }
    }
}
    $loop=true;
}
var_dump($item);

输出

array(3) { 
   [1]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } 
   [2]=> array(2) { [0]=> string(2) "aa" [1]=> string(2) "bb" } 
   [3]=> array(2) { [0]=> string(3) "aaa" [1]=> string(3) "bbb" } 
} 

答案 1 :(得分:1)

您可以尝试以下代码中的方法。顺便说一句,你可以Quick-Test it Here

<?php


    $x = array(
        'a' => array('aa' => array('aaa' => array(1, 2, 3))),
        'b' => array('bb' => array('bbb' => array(1, 2, 3))),
    );

    $result     = array();
    $result[]   = array_keys($x);
    $tmp1       = [];
    $tmp2       = [];


    foreach($x as $k=>$arrData){
        if(is_array($arrData)){
            foreach($arrData as $k1=>$v1){
                $tmp1[] = $k1;
                if(is_array($v1)){
                    foreach($v1 as $k2=>$v2){
                        $tmp2[] = $k2;
                    }
                }
            }
        }
    }
    $result[]   = $tmp1;
    $result[]   = $tmp2;

    var_dump($result);

    //YIELDS:::

    array (size=3)
      0 => 
        array (size=2)
          0 => string 'a' (length=1)
          1 => string 'b' (length=1)
      1 => 
        array (size=2)
          0 => string 'aa' (length=2)
          1 => string 'bb' (length=2)
      2 => 
        array (size=2)
          0 => string 'aaa' (length=3)
          1 => string 'bbb' (length=3)

答案 2 :(得分:0)

根据您的解释,我会建议这样的事情: -

$x = array(
  'a' => array('aa' => array('aaa' => array(1, 2, 3))),
  'b' => array('bb' => array('bbb' => array(1, 2, 3))),
);

$y = array();
$l = array();
foreach ($x as $l[0] => $x2) {
    foreach ($x2 as $l[1] => $x3) {
        foreach ($x3 as $l[2] => $keys) {
            for ($i = 0; $i < 3; $i++) {
                if (isset($y[$keys[$i]])) {
                    $y[$keys[$i]][] = $l[$i];
                } else {
                    $y[$keys[$i]] = array($l[$i]);
                }
            }
        }
    }
}

但请注意,如果深度变化或与成为键的值的数量不匹配,此代码将失败...