繁体   English   中英

转换多维数组键值

[英]Convert multi-dimensional 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 2->a,b; 1->aa,bb; 3->aaa,bbb

您可以尝试如下操作:

$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" } 
} 

您可以在下面的代码中尝试这种方法。 而且,您可以在此处进行快速测试

<?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)

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

$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]);
                }
            }
        }
    }
}

但是请注意,如果深度更改或与成为键的值的数量不匹配,则此代码将失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM