Multidimensional array from string

前端 未结 3 689
故里飘歌
故里飘歌 2020-12-11 21:52

Let\'s say I have this string which I want to put in a multidimensional array.

Edit : The number of subfolders in the string are dynamic .. from zero sub folders to

3条回答
  •  猫巷女王i
    2020-12-11 22:22

    You could borrow pieces of code from this class (link no longer available), specifically the _processContentEntry method.

    Here's a modified version of the method that does the job:

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

    The output of

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

    Will be

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

    I suppose that's what you need :)


    UPDATE

    As per your comment, here's how you can process a string separated by new line characters:

    $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. To convert this array to a string, just call json_encode, however I see no reason to convert it to an array and then back to what it was.

提交回复
热议问题