2016-07-01 2 views
0

Ich habe diese großen Array wie folgtWie foreach verwenden, ohne zu wissen, Tiefe wie einfache Array in PHP

Array 
    (
     [Prosess 1_35] => Array 
      (
       [AF Decom_582] => Array 
        (
         [documents] => Array 
          (
          ) 

        ) 

       [documents] => Array 
        (
         [0] => stdClass Object 
          (
           [title] => 
           [doc_id] => 726 

          ) 

         [1] => stdClass Object 
          (
           [title] => Brunvollquizen 
           [doc_id] => 878 

          ) 

         [2] => stdClass Object 
          (
           [title] => Nytt dokument 
           [doc_id] => 1200 

          ) 

         [3] => stdClass Object 
          (
           [title] => 
           [doc_id] => 1215 

          ) 

         [4] => stdClass Object 
          (
           [title] => Procedure AXC-12 
           [doc_id] => 1216 

          ) 

        ) 

      ) 

     [Prosess 2_2] => Array 
      (
       [documents] => Array 
        (
         [0] => stdClass Object 
          (
           [title] => 
           [doc_id] => 1178 

          ) 

        ) 

      ) 

     [Prosess 3_3] => Array 
      (
       [Delprosess 3-1_10] => Array 
        (
         [test1_340] => Array 
        (
         [documents] => Array 
          (
          ) 

        ) 
         [documents] => Array 
          (
          ) 

        ) 

       [documents] => Array 
        (
        ) 

      ) 
    ) 

Ich brauche ein einfaches Array erstellen wie

Prozess 1_35 haben 4 Dokumente und einen Unterordner und Unterordner haben keine Dokumente Prozess 2_2 haben 1 Dokument Prozess 3_3 kein Dokument, sondern einen Unterordner‘ und braucht ein leeres Array nach jedem Ordner hinzufügen

array(
    array('Prosess 1_35',NULl,NUL...) 
    array('NULL','doc_name,'doc_id') 
    array('NULL','doc_name,'doc_id') 
    array('NULL','doc_name,'doc_id') 
    array('NULL','doc_name,'doc_id') 
    array(' AF Decom_582',NULL,NULL) 
    array('NULL','NULL',''NULL) 
    array('Prosess 2_2',NULl,NUL...) 
    array('NULL','doc_name,'doc_id') 
    array('Prosess 3_3',NULl,NUL...) 
    array(' Delprosess 3-1_10',NULl,NUL...) 
    array(' test1_340',NULl,NUL...) 

) 

ich unten Code versucht, aber leider bin ich nicht in der Lage dies so einfach Array mich

private static function _createArray1($requirementdocs, $level = 0) 
    { 
     $indent = str_repeat(" ", $level * 2);*/ 
     foreach($requirementdocs as $key => $sreq) 
     { 
      $rowarr = array(); 
        $key = explode("_",$subkey); 
       $rowarr[0] = $indent.$key[1]; 
      if ($key[0] == "documents" && !empty($sreq)) continue; 
      foreach($sreq as $subkey => $req) 
      { 

       $rowarr[1] = $req->doc_id; 
       $rowarr[2] = $req->title; 
       array_push($res , $rowarr); 
      } 

      self::_createArray($sreq, $level+1); 
     } 

    } 

Kann mir jemand helfen, in diese zu machen?

+1

Verwenden Sie Rekursionsmethode – Peon

+0

bereits in meinem Code verwenden – user3198315

+1

Nein, Sie sind nicht, ruft die Methode nicht selbst, aber eine andere Methode, bedeutet, '_createArray1' sollte' _createArray1' ** nicht ** '_createArray' aufrufen – Peon

Antwort

1

Ist das, was Sie erreichen möchten?

$arr = [ 
    [ 
     [ 
      1 
     ], 
     [ 
      1 
     ], 
     [ 
      1 
     ], 
    ], 
    [ 
     1 
    ], 
    [ 
     [ 
      1 
     ], 
     [ 
      [ 
       [ 
        1 
       ] 
      ] 
     ], 
    ] 
]; 

echo '<pre>'; print_r($arr); echo '</pre>'; 

$new = flatten($arr); 

echo '<pre>'; print_r($new); echo '</pre>'; 

Und die rekursive Methode:

function flatten($array, $depth = INF) 
{ 
    $result = []; 

    foreach ($array as $item) { 
     $item = $item instanceof Collection ? $item->all() : $item; 

     if (is_array($item)) { 
      if ($depth === 1) { 
       $result = array_merge($result, $item); 
       continue; 
      } 

      $result = array_merge($result, flatten($item, $depth - 1)); 
      continue; 
     } 

     $result[] = $item; 
    } 

    return $result; 
} 

Btw, das der Methodencode Helfer array_flatten Laravel ist.