2012-04-12 18 views
3

Nehmen wir an, ich habe diese Zeichenfolge, die ich in einem mehrdimensionalen Array einfügen möchte.Multidimensionales Array von String

Edit: Die Anzahl der Unterordner im String dynamisch sind .. von Null Unterordnern zu 10

<?php 
     $string ="Folder1/Folder2/Folder3/filename1\n"; 
     $string .=" Folder1/Folder2/Folder3/filename2\n"; 
     $string .=" Folder4/Folder2/Folder3/filename3\n"; 
?> 

ich folgendes Array

zurückgegeben werden soll
<?php 
Array 
(
    [Folder1] => Array 
     (
      [Folder2] => Array 
       (
        [Folder3] => Array 
         (
          [0] => filename1 
          [1] => filename2 
         ) 

       ) 

     ) 

    [Folder4] => Array 
     (
      [Folder2] => Array 
       (
        [Folder3] => Array 
         (
          [0] => filename3 
         ) 

       ) 

     ) 

) 
?> 

Was der effizienteste Weg sein würde, um das zu erreichen ?

Und zum Spaß, sagen wir, dieses Array wird an die andere Seite der Welt gesendet werden und es möchte zu einer Zeichenfolge zurückkehren. Wie würden wir das machen?

+0

Nun, wenn Sie eine Zeichenfolge, und Sie wollen schließlich eine Zeichenfolge, warum würden Sie ein Array wollen? –

+0

mögliche Duplikate von [String mit Array-Struktur zu Array] (http://stackoverflow.com/questions/8537148/string-with-array-structure-to-array) – Jon

+0

Weil einige es als Array ausgeben möchten, und einige möchte es als String in DB speichern. Senden von beiden wäre eine Option, ist aber nicht sehr effizient. –

Antwort

8

Sie könnten Teile des Codes aus this class, speziell die _processContentEntry Methode ausleihen.

Hier ist eine modifizierte Version des Verfahrens, dass die Arbeit erledigt:

function stringToArray($path) 
{ 
    $separator = '/'; 
    $pos = strpos($path, $separator); 

    if ($pos === false) { 
     return array($path); 
    } 

    $key = substr($path, 0, $pos); 
    $path = substr($path, $pos + 1); 

    $result = array(
     $key => stringToArray($path), 
    ); 

    return $result; 
} 

Die Ausgabe von

var_dump(stringToArray('a/b/c/d')); 

array(1) { 
    ["a"]=> 
    array(1) { 
    ["b"]=> 
    array(1) { 
     ["c"]=> 
     array(1) { 
     [0]=> 
     string(1) "d" 
     } 
    } 
    } 
} 

sein wird, nehme ich an, dass das, was Sie brauchen:)


UPDATE

Wie pro Ihren Kommentar, hier ist, wie Sie eine Zeichenfolge durch Newline-Zeichen getrennt verarbeiten kann:

$string = "Folder1/Folder2/Folder3/filename1\n"; 
$string .= " Folder1/Folder2/Folder3/filename2\n"; 
$string .= " Folder4/Folder2/Folder3/filename3\n"; 

// split string into lines 
$lines = explode(PHP_EOL, $string); 

// trim all entries 
$lines = array_map('trim', $lines); 

// remove all empty entries 
$lines = array_filter($lines); 

$output = array(); 

// process each path 
foreach ($lines as $line) { 
    // split each line by/
    $struct = stringToArray($line); 

    // merge new path into the output array 
    $output = array_merge_recursive($output, $struct); 
} 

print_r($output); 

P. S. Um dieses Array in eine Zeichenfolge zu konvertieren, rufen Sie einfach json_encode, aber ich sehe keinen Grund, es in ein Array zu konvertieren und dann zurück, was es war.

+0

Dies wird ein anderes Array zurückgeben. Mein Beispiel enthält nicht 3 Strings, sondern 1 String aus 3 Zeilen. Versuch es selber. Aber danke, dass Sie in die richtige Richtung zeigen. –

+0

Code hinzugefügt, um Ihre mehrzeiligen Strings zu verarbeiten. Jetzt gibt es genau das Array aus, das Sie benötigen. – Andris

+0

Vielen Dank !! –

0

ich das denke, was Sie wollen,

$string ="Folder1/Folder2/Folder3/filename1\n"; 
$string .="Folder1/Folder2/Folder3/filename2\n"; 
$string .="Folder4/Folder2/Folder3/filename3\n"; 


$string_array_1 = explode("\n", $string); 

$array_need = array(); 

foreach($string_array_1 as $array_values) 
{ 
     if($array_values) 
     { 
      $folders = explode("/", $array_values); 
      $array_need[$folders[0]][$folders[1]][$folders[2]][] = $folders[3]; 
     } 
    } 

print_r($array_need); 
+0

Es ist großartig, aber nicht dynamisch. Was passiert, wenn sich die Anzahl der Unterordner ändert? Folder5/Folder2/Folder3/Folder4/Dateiname4 –

+0

ok, dann warten wir Sie bald auf. –

Verwandte Themen