2013-09-17 6 views
0

У меня есть такой массив.php array shift keys многомерный массив

$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] => 
       ) 
      ) 
    ) 
    ) 
) 

Я ценю чью-то помощь.

+0

не это уже договорились? – Satya

+1

где второй массив? вы написали «Я хочу, чтобы этот массив перестраивался так», который будет для 2 массивов. 1-й массив - это входной массив, а второй массив - это переупорядоченный массив в качестве выходного. –

+0

Только это много контента или очень много контента? Если что-то среднее, вы можете организовать вручную. В противном случае нужны некоторые коды. А как насчет вас? – KarSho

ответ

0

Этот сценарий слишком близко, но после того, как 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(); 
+0

@Heman Да, вы правы, мой ответ одинаково неадекватен. Вам нужно будет использовать какую-то рекурсию, чтобы получить желаемый результат. – cars10m

+0

Спасибо, ребята. но выход, который я получаю, отличается от того, что я ожидаю. она должна быть, как этот массив ( [18] => Массив ( [1] => [14] => ) [30] => Массив ( [23] => Массив ( [24] => Массив ( [25] => [26] => Массив ( [27] => [28] => ) ) ) ) ) –

+0

@ cars10: Спасибо для вашей помощи. любые другие предложения для получения ожидаемого результата? Я новичок. –

0

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

Размещая & до имен переменных в foreach петли вы работаете с ссылками на эти vaiables и а не с скопированными значениями. Применяя процедуру на моих (измененными) пример приводит следующий вывод

:

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] => 
         ) 

       ) 

     ) 

) 
+0

Привет, Спасибо, что вернулся. Проблема - уровень rec не является согласованным. Этими ключевыми значениями являются идентификаторы компаний. В этом примере все дочерние компании перечислены под головной компанией. В некоторых случаях у подкомпаний есть много дочерних компаний, и это продолжается так.Не знаю, что делать :( –

+0

@Heman Вы видели мое последнее редактирование (2 часа назад)? – cars10m

+0

Спасибо, он отлично работает. Очень ценю вашу поддержку и помощь. –

Смежные вопросы