2017-03-20 2 views
1

Ich versuche, eine Zeichenfolge in eine verschachtelte Array
Hier zu drehen ist mein string:Schalten Zeichenfolge, um verschachtelte Array php

a/b/d.docx 

und ich wollte so sein:

array(
    "name" => "a", 
    "type" => "folder", 
    "sub" => array(
     "name" => "b", 
     "type" => "folder", 
     "sub" => array(
      "name" => "c.docx", 
      "type" => "file", 
      "size" => "20" 
     ) 
    ) 
) 

Diese ist der Code, den ich bis jetzt habe

Ich probiere diese Funktionen, aber dies nur Turn String in ein einzelnes Array und es kann auch nicht die "Artikel" -Linie.
Jede Hilfe würde geschätzt werden. Danke.
Beachten Sie, dass der Pfad virtuell ist und nicht existiert.
UPDATE: Wie ich Pfad zu jedem Array ?? beispielsweise hinzufügen, "path"=>"a/b"

+0

Sie‘ Ich werde ein wenig kommentieren, ich kann nicht verfolgen, was du tust und was du versuchst zu tun. – paullb

+0

'$ num = - $ num' ist nutzlos, du kannst' - $ num' verwenden, es wird dasselbe sein –

Antwort

0
<?php 
$strings='a/b/d.docx'; 

$items = explode('/', $strings); 
$num = count($items)-1; 

$root= array(); 
$cur = &$root; 

$v=''; 

foreach($items as $keys => $value) { 

    $v = $v.$value; 
    $temp = array( "name" => $value, "path"=>$v, "type" => "folder", "items" => ""); 
    if($keys == $num){ 
     $temp = array("name" => $value, "path"=>$v, "type" => "file", "size" => "20"); 
    } 
    $v= $v.'/'; 

    if($keys==0) { 
     $cur = $temp; 
    } 
    else 
    { 
     $cur['items'] = $temp;  
     $cur = &$cur['items']; 
    } 
} 
var_dump($root); 
+0

Danke für deine Hilfe. Wie kann ich einen Pfad zu Arrays hinzufügen? Zum Beispiel" Pfad "=>" a/b " – MRSH

+0

Ich habe meinen Antwort-Post bearbeitet, die Antwort ist einfach zu verstehen, du musst es selbst versuchen lerne etwas –

+0

Kannst du bitte den Teil erklären? – MRSH

2

Sie können das tun:

$path = 'a/b/d.docx'; 

$parts = explode('/', $path); 

$result = [ 'name' => array_pop($parts), 'type' => 'file', 'size' => 20 ]; 

while ($parts) { 
    $result = [ 'name' => array_pop($parts), 'type' => 'folder', 'sub' => $result ]; 
} 

print_r($result); 
+0

Danke für deine Hilfe.Wie kann ich einen Pfad zu Arrays hinzufügen? ZB "path" => "a/b " – MRSH

0

Try Rekursion:

public function testAction(){ 
    $sString = 'a/b/c/d.exe'; 
    $aExploded = explode('/', $sString); 
    var_dump($this->_parse_folder_rec($aExploded)); 
} 

private function _parse_folder_rec($aExploded){ 
    $aResult = []; 
    $aResult['name'] = array_shift($aExploded); 
    if($aExploded){ 
     $aResult['type'] = 'folder'; 
     $aResult['sub'] = $this->_parse_folder_rec($aExploded); 
    }else{ 
     $aResult['type'] = 'file'; 
     $aResult['size'] = 20; 
    } 
    return $aResult; 
} 
Verwandte Themen