sandip kakade
sandip kakade

Reputation: 1356

How to compare key and value in more than two array?

I am comparing three arrays in nested foreach conditions. Following are the arrays

    Array
(
    [master/city] => City
    [master/national_holiday] => National Holiday
    [master/operator_comments] => Operator Comments
    [master/sensors] => Sensors
    [master/modbus] => Modbus
    [master/manufacturers] => Manufacturers
    [master/make_model] => Make Model
    [master/dispatch_vendors] => Dispatch Vendors
)      

    Array
(
    [1] => View
    [2] => Write
)

Array
    (
        [master/city] => 1
        [master/national_holiday] => 2
        [master/operator_comments] => 1
        [master/sensors] => 2
        [master/modbus] => 1
        [master/manufacturers] => 2
        [master/make_model] => 1
    )

Now the scenario is as follows:-

My first foreach iteartes first array

Then in the same foreach i m using second foreach which itrates second array again in second foreach i m using third foreach to iterate third array

In third foreach , i m comparing key of first array with the key of second array and comparing value of second array with key of third array

If above condition is satisfied then in my dropdown the specific option will append selected Like <option value="1" selected="">View</option>

I am using following code

<?php
                    $first_array =  first_array();
                    $i = 1;
                    foreach($first_array as $k => $val) {
                    ?>
                    <tr>
                      <td>{{ $i }}</td>
                      <td class="mailbox-name">{{ $val }}</td>
                      <td><?php $second_array =  second_array(); ?>
                            <select class="form-control master-menu" name="master_menu[{{$k}}]">
                              <option value="">Select Role</option>
                                <?php

                                    foreach ($second_array as $key => $value) {
                                        foreach ($third_array as $mkey => $mval) {
                                ?>
                                <option value="<?php echo $key; ?>"
                                    <?php if (($mkey == $k) && ($mval == $key)) { echo "selected"; } ?>><?php echo $value; ?></option>
                                <?php } } ?>
                            </select>
                      </td>
                    </tr>
                    <?php $i++;  } ?>

I am using above code and getting issue that in second array there two values and in third array five values so in my dropdown count of option are ten insted of two. This is my output. enter image description here

Please suggest me.

Upvotes: 0

Views: 1093

Answers (2)

beingalex
beingalex

Reputation: 2476

Maybe something like this? I have simplified the process to demonstrate what is happening. I have also added the correct select values:

foreach ($first_array as $key => $value) {
?>

    <p><?php echo $value; ?></p>


    <?php foreach ($second_array as $second_key => $second_value) { ?>



        <?php if ($key == $second_key) { ?>
            <select>    

                <?php foreach ($third_array as $third_key => $third_value) { ?>

                    <option <?php echo ($third_key == $second_value ? 'selected=selected' : null); ?>><?php echo $third_value; ?></option>

                <?php } ?>



            </select>

        <?php } else { ?>

            <select>    

                <?php foreach ($third_array as $third_key => $third_value) { ?>

                    <option ><?php echo $third_value; ?></option>

                <?php } ?>



            </select>

        <?php } ?>


   <?php } ?>


<?php
}

Upvotes: 1

user6403320
user6403320

Reputation:

For example you may try this code

foreach ($tmparray as $innerarray) {
    //check type
    if (is_array($innerarray)) {
        //echo through inner loop
        foreach ($innerarray as $value) {
            echo $value;
        }
    } else {
        //one,two,three
        echo $innerarray;
    }
}

Upvotes: 0

Related Questions