【问题标题】:php array shift keys multidimensional arrayphp数组移位键多维数组
【发布时间】:2013-09-21 09:38:53
【问题描述】:

我有一个这样的数组。

$array = array ( '18' => array (  '1' =>'', '14' =>''),
                 '23' => array ( '24' =>''), 
                 '24' => array ( '25' =>'', '26' =>''),
                 '26' => array ( '27' =>'', '28' =>''), 
                 '30' => array ( '23' =>'', '31' =>'')
                );

我想让这个数组像这样重新排列。

 Array 
(
[18] => Array
    (
    [1] =>
    [14] =>
    )
[30] => Array
    (
    [23] => Array
       ( 
        [24] => Array
           ( 
            [25] =>
            [26] => Array
               ( 
                [27] =>
                [28] =>
               )
           )
      )
   )
)

感谢某人的帮助。

【问题讨论】:

  • 这不是已经安排好了么?
  • 第二个数组在哪里??你已经写了“我希望这个数组像这样重新排列”,这将是 2 个数组。第一个数组是输入数组,第二个数组是重新排列的数组作为输出。
  • 只有这么多内容还是非常多的内容?如果有些意思,您可以手动安排。否则需要一些代码。你呢?

标签: php arrays recursion multidimensional-array


【解决方案1】:

这个脚本太接近了,但是在 24 索引之后有一些问题

<?php 

class arrayTest
{
    //create the array
    public $array = array ( '18' => array ( '1' => '', '14' => ''),
        '23' => array ( '24' =>''),
        '24' => array ( '25' =>'', '26' =>''),
        '26' => array ( '27' =>'', '28' =>''),
        '30' => array ('23'=>'','31'=>'')
        );

    public $data = array();

    public function index()
    {
        //data array
        $data =array();

        //process each key of the array
        foreach($this->array as $key=>$val)
        {
            //check the key value
            if($key==18 || $key==30)
            {
                //process the child array
                foreach($val as $key1=>$val1)
                {
                    //bind the expectation
                    $data[$key][$key1] =isset($this->array[$key1])?$this->get_array($key1):'';
                }
            }

        }

        //output
        print_r($data);
    }


    //function process the each array
    function get_array($index)
    {       
        //process the each array
        foreach($this->array[$index] as $key=>$value)
        {
            if(isset($this->array[$key]) && is_array($this->array[$key]))
            {
                foreach($this->array[$key] as $key1=>$value1)
                {
                    //
                    $this->data[$key] = isset($this->array[$key1])?$this->get_array($key1):'';
                }

            }else{

                $this->data[$key] = '';
            }
        }

        return $this->data;
    }


}


    $obj = new arrayTest();

    $obj->index();

【讨论】:

  • @Heman 是的,你是对的,我的回答同样不充分。您将不得不使用某种递归来获得所需的结果。
  • 谢谢大家。但我得到的输出与我期望的不同。它应该是这样的 Array ( [18] => Array ( [1] => [14] => ) [30] => Array ( [23] => Array ( [24] => Array ( [25] = > [26] => 数组 ([27] => [28] => ) ) ) ) )
  • @cars10:感谢您的帮助。获得预期结果的任何其他建议?我是新手。
  • @Sundar:谢谢你的时间。有什么建议可以得到正确的输出?
  • 这对小尺寸数组很有用,如果数组太大然后你会进入 memory_exceed 错误尝试向数组中添加引用并经常清除内存
【解决方案2】:

2。编辑:

我修改了我的迭代解决方案,以便检查文本格式的结果数组的总长度。如果长度没有改变,迭代将退出。

(修改)示例数据:

$a=array('18'=> array (  '1' =>'', '14' =>''),
                '20' => array ( '32' =>''),
                '23' => array ( '24' =>''), 
                '24' => array ( '25' =>'', '26' =>''),
                '26' => array ( '27' =>'', '28' =>''),
                '29' => array ( '33' =>''), 
                '30' => array ( '23' =>'', '31' =>''),
                '32' => array ( '30' =>''),
                '33' => array ( '32' =>'')
               );

代码:

function plough(&$a){ // ploughs throught the array once from top to bottom ...
 foreach ($a as $ak => &$av){
  foreach($av as $k => &$v) {
   if(isset($a[$k])) $v=$a[$k];
  }
 }
 return strlen(print_r($a,1)); // returns string-length of print_r-output
}

// iterate until there is no change in string-length any more ...
for ($al1=1+$al0=0 ;$al0<$al1; $al1=plough($a)) $al0=$al1;
print_r($a);

通过将&amp; 放在foreach 循环中的变量名之前,您正在使用对这些变量的引用,而不是使用复制的值。将例程应用于我的(修改后的)示例会导致以下结果

输出:

Array
(
    [18] => Array
        (
            [1] => 
            [14] => 
        )

    [20] => Array
        (
            [32] => Array
                (
                    [30] => Array
                        (
                            [23] => Array
                                (
                                    [24] => Array
                                        (
                                            [25] => 
                                            [26] => Array
                                                (
                                                    [27] => 
                                                    [28] => 
                                                )

                                        )

                                )

                            [31] => 
                        )

                )

        )

    [23] => Array
        (
            [24] => Array
                (
                    [25] => 
                    [26] => Array
                        (
                            [27] => 
                            [28] => 
                        )

                )

        )

    [24] => Array
        (
            [25] => 
            [26] => Array
                (
                    [27] => 
                    [28] => 
                )

        )

    [26] => Array
        (
            [27] => 
            [28] => 
        )

    [29] => Array
        (
            [33] => Array
                (
                    [32] => Array
                        (
                            [30] => Array
                                (
                                    [23] => Array
                                        (
                                            [24] => Array
                                                (
                                                    [25] => 
                                                    [26] => Array
                                                        (
                                                            [27] => 
                                                            [28] => 
                                                        )

                                                )

                                        )

                                    [31] => 
                                )

                        )

                )

        )

    [30] => Array
        (
            [23] => Array
                (
                    [24] => Array
                        (
                            [25] => 
                            [26] => Array
                                (
                                    [27] => 
                                    [28] => 
                                )

                        )

                )

            [31] => 
        )

    [32] => Array
        (
            [30] => Array
                (
                    [23] => Array
                        (
                            [24] => Array
                                (
                                    [25] => 
                                    [26] => Array
                                        (
                                            [27] => 
                                            [28] => 
                                        )

                                )

                        )

                    [31] => 
                )

        )

    [33] => Array
        (
            [32] => Array
                (
                    [30] => Array
                        (
                            [23] => Array
                                (
                                    [24] => Array
                                        (
                                            [25] => 
                                            [26] => Array
                                                (
                                                    [27] => 
                                                    [28] => 
                                                )

                                        )

                                )

                            [31] => 
                        )

                )

        )

)

【讨论】:

  • 您好,感谢您的回复。问题是记录水平不一致。这些关键值是公司 ID。在本例中,所有子公司都列在总公司之下。在某些情况下,子公司有许多子公司,并且一直如此。不知道该怎么办:(
  • 谢谢伙计。它工作正常。非常感谢您的支持和帮助。干得好!
猜你喜欢
  • 2011-09-20
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2013-11-27
  • 2021-11-26
  • 1970-01-01
相关资源
最近更新 更多