Nishant Vikhe
Nishant Vikhe

Reputation: 43

convert string to multidimensional array

I have this array

dev3->content->->mktg->->->pls1->->->pls2->->->config->->splash

I want to convert this string to multidimensional array. like this

 Array
        (
        [0] => dev3
        Array (
            [0] => ->content
            Array  (
                [0] => ->->mktg
                    Array(
                        [0] => ->->->pls1
                        [1] => ->->->pls2
                        [2] => ->->->config
                    )
                [1] => ->->splash
            )
        )
    )

Can anyone do this

Upvotes: 1

Views: 80

Answers (1)

splash58
splash58

Reputation: 26153

it does not work if level will be increaed more then +1 on any step

$str = 'dev3->content->->mktg->->->pls1->->->pls2->->->config->->splash';

$in = preg_split('/(?<!>)(?=->)/', $str);

Above we make such array from the input string

Array
(
    [0] => dev3
    [1] => ->content
    [2] => ->->mktg
    [3] => ->->->pls1
    [4] => ->->->pls2
    [5] => ->->->config
    [6] => ->->splash
) 

continue working

$result = [];
$p = &$result;
$level = 0;
foreach($in as $i) {
  // Count next level
  $c = substr_count($i, '->');
  // if level is not changed
  if($c == $level) { $p[] = $i; continue;  } 
  // level increased
  if ($c == $level + 1) {
     $level++;
     $p[] = [$i]; 
     $p = &$p[count($p)-1];
     continue;
  }  
  // any level less then achived before
  if ($c < $level) {  
     $p = &$result;
     $level = $c;
     while($c--)
        $p = &$p[count($p)-1];
     $p[] = $i;
     continue;
  }
  die("I can't process this input string"); 
}
print_r($result);

working demo

Upvotes: 3

Related Questions