0

I have an array like this in PHP:

$array = array(
     'main0' => array(
        'level0' => array('0'=>'value_1'),
        'level1' => array(
               '0' => 'value_2',
               '1' => 'value_3',
               ),
        'level2' => array('0'=>'value_445')
        ),
     'main1' => array(
        'level0' => array('0'=>'value_1'),
        'level1' => array('0'=>'value_12'),
        'level2' => array(
               '0' => 'value_2',
               '1' => 'value_3',
               ),
        'level3' => array('0'=>'value_5')
        ),
);

This array will be dynamic, to many mainkeys and levels, each level also have dynamic amount of values.

My problem is, I'm trying to echo each of the array level in select option html markup. I've tried foreach ($array[][] as $value) but with no luck. How to achieve this in PHP?

EDIT

Solved my problem using 3 foreach, might be not the cleanest solution but it works. My solution in blade php:

<?php $data = Product::GetCategories(); ?>
        @if ($data != null)
            @foreach ($data as $item)
                <optgroup label="{{ $item[0][0] }}">
                    @foreach ($item as $level)
                        @foreach ($level as $v)
                            <option value="{{ $v }}">{{ $v }}</option>
                        @endforeach
                    @endforeach
                </optgroup>
            @endforeach
        @endif
3
  • Where is the echoing code? Why no luck? What is being output? Commented Jan 7, 2014 at 6:53
  • echoing code is like this foreach($array as $k=>$v) echo "<option>".$v."</option>";. Error output is Error Array to String Conversion Commented Jan 7, 2014 at 6:56
  • @user2002495 Can you show the 'select option' html example the way you like to have ? According to your array, the selection options will have duplicate values. Is each 'main' a different 'select' box ? Commented Jan 7, 2014 at 7:03

4 Answers 4

2

If you don't really care about manipulating the array items, and all you want is to see the result on screen, you may use: print_r($array);

If you do need to do something with the array items, then here is a recursive function(myRecursiveFunction), and a normal function that is executed on a non-array (myNormalFunction) to illustrate the process.

function myRecursiveFunction($array) {
    foreach($array as $key=>$value) {
        if(is_array($value)) {
             myRecursiveFunction($value);
        }
        myNormalFunction($value);
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

For starters use something like DomDocument to manipulate html in php.

Other than that try:

foreach ($array as $key => $value ) {
    print $key . " " . $value;
}

For further nesting keep is_array in mind, so now your code becomes

foreach ($array as $key => $value ) {
    print $key . " " . $value;
    if(is_array($value)) {
         //do something with this array
    }
}

You could do something with recursion here but its much better to use something like DomDocument which maintains a recursive tree for you to traverse with less code.

Comments

0

You can use recursion here.

Try this.

function traverse($array){
    foreach($array as $item){
       if(is_array($item)){
           traverse($item);
       }else echo $item . "<br/>";
    }
}

traverse($array);

Comments

0

If you don't need dynamically go any deeper it would be like:

foreach($array as $mains) {
    foreach($mains as $level){
        var_dump($level);
    }
}

If you want go deeper when $level has any children go with this:

function explore($array) {
    foreach ($array as $child) {
        if (gettype($child) === 'array')) {
            explore($child);
        } else {
            echo $child;
        }
    }
}

// init
explore($array);

Comments

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.