1

Here are my variables

<?php
    $submenu = array( array("submenu1", "submenu2", "submenu3", "submenu4"),
           array("submenuA", "submenuB", "submenuC", "submenuD"),
           array("submenuI", "submenuII", "submenuIII", "submenuIV")
    );

    $mainmenu="Main1, Main2, Main3";
?>

The desired output should be:

Main1
 submenu1
 submenu2
 submenu3
 submenu4

Main2
 submenuA
 submenuB
 submenuC
 submenuD

Main3
 submenuI
 submenuII
 submenuIII
 submenuIV

Thanks!

1
  • 1
    What you have tried..?? Commented Mar 15, 2013 at 4:30

4 Answers 4

1

Try this:

<?php
    $submenu = array( array("submenu1", "submenu2", "submenu3", "submenu4"),
        array("submenuA", "submenuB", "submenuC", "submenuD"),
        array("submenuI", "submenuII", "submenuIII", "submenuIV")
    );
    $mainmenu="Main1, Main2, Main3";
    $mainArr=explode(',',$mainmenu);
    $newArr=array_combine($mainArr,$submenu);
    print_r($newArr);   
?>

You can test it on http://writecodeonline.com/php/

Output:

Array ( [Main1] => Array ( [0] => submenu1 [1] => submenu2 [2] => submenu3 [3] => submenu4 ) 
[ Main2] => Array ( [0] => submenuA [1] => submenuB [2] => submenuC [3] => submenuD ) 
[ Main3] => Array ( [0] => submenuI [1] => submenuII [2] => submenuIII [3] => submenuIV ) )
Sign up to request clarification or add additional context in comments.

1 Comment

Should be exploding on ', ' to get rid of the leading space. Also much easier to use array_combine.
0

Try this:

<?php
    $submenu = array( array("submenu1", "submenu2", "submenu3", "submenu4"),
           array("submenuA", "submenuB", "submenuC", "submenuD"),
           array("submenuI", "submenuII", "submenuIII", "submenuIV")
         );

    $mainmenu="Main1, Main2, Main3";
    $mainmenu=explode(", ",$mainmenu);
    $tree=array_combine($mainmenu,$submenu);
    echo '<pre>';
    foreach($tree as $menuname=>$childArray)
    {
        echo "$menuname\n";
        foreach($childArray as $submenuname)
        {
            echo " $submenuname\n";
        }
    }
    echo '</pre>';
?>

Output:

<pre>Main1
 submenu1
 submenu2
 submenu3
 submenu4
Main2
 submenuA
 submenuB
 submenuC
 submenuD
Main3
 submenuI
 submenuII
 submenuIII
 submenuIV
</pre>

Comments

0
$submenu = array( array("submenu1", "submenu2", "submenu3", "submenu4"),
       array("submenuA", "submenuB", "submenuC", "submenuD"),
       array("submenuI", "submenuII", "submenuIII", "submenuIV")
     );

$mainmenu="Main1, Main2, Main3";

$main = explode(',', $mainmenu);

for($i=0; $i<count($main); $i++){
    for($j=0; $j<count($submenu); $j++){
        $array[$main[$i]][$j] = $submenu[$i][$j];
    }
}

$array now contains what you need.

2 Comments

Not quite. The second mainmenu item will have leading space " Main2" and the third will be " Main3". Could have used $array=array_combine($main,$submenu); to accomplish the same thing instead of using two ugly-looking for-loops. Also isn't formatting $array to the original poster's desired output.
You're right about formatting the output to desired outcome, however the main thing here is to get them in the correct form and order. Otherwise who would want menus and submenus to be a string of characters?? Obviously it's there to show how it should be ordered (i.e. main menus followed by submenus each)
0

You can try something like:

// Make your main menu an array
$mainMenuArray = preg_split("/, /", $mainmenu);

// Loop on the main menu
for($i = 0 ; $i < count($mainMenuArray) ; $i++)
{
    // print main menu entry
    echo $mainMenyArray[$i];

    // Print all sub menu linked to the current main menu entry
    foreach($submenu[$i] as $subMenuEntry)
        echo $subMenuEntry;

    echo "\n";
}

1 Comment

$mainMenyArray = preg_split("/, /", $mainmenu); should be: $mainMenuArray = preg_split("/, /", $mainmenu); you spelled it wrong. Also echo $mainMenyArray; should be echo $mainMenuArray[$i]; Next time test your code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.