Search code examples
phparrayscheckboxsub-array

php if array has another array


Seems weird matter. Is there any way to detect array that contains sub-array in php, such parent-child concept in css, jquery. I want to insert data only if array has subarray

Dynamic Menu

<?php
    if(){ //loop starts
?>  
    <li>
        <input type="checkbox" name="menu[]" value="<?php echo $row['value']?>"> <?php echo $row['title'];
            <ul>
                <?php
                    if(){ //loop starts
                ?>
                <li>
                    <input type="checkbox" name="submenu[]" value="<?php echo $row1['value']?>"><?php echo $row1['subtitle'];
                </li>;
                }?>

            </ul>
    </li>
}?>

Output

<li>
    <input type="checkbox" name="menu[]" value="vehicle">
    <ul>
        <li><input type="checkbox" name="submenu[]" value="car"></li>
        <li><input type="checkbox" name="submenu[]" value="bike"></li>
     </ul>
</li>
<li><input type="checkbox" name="menu[]" value="sport"></li>

upload.php

$data = explode("," ,$_POST["menu"]); 
$subdata = explode("," ,$_POST["submenu"]);
foreach ($data AS $key => $menu){
    if(){         // This Menu has subarray

    }

Solution

  • in your case you have to do easy with following method

    <li>
            <input type="checkbox" name="menu[0][]" value="vehicle">
            <ul>
                <li><input type="checkbox" name="submenu[0][]" value="car"></li>
                <li><input type="checkbox" name="submenu[0][]" value="bike"></li>
             </ul>
        </li>
        <li><input type="checkbox" name="menu[1][]" value="sport"></li>
            <ul>
                <li><input type="checkbox" name="submenu[1][]" value="cricket"></li>
                <li><input type="checkbox" name="submenu[1][]" value="football"</li>
             </ul>
    

    then from a backend, you can do like

    foreach($_POST['menu'] as $key=>$val) {
            if(is_array($val) && count($val)) {
               //do action
            }
    }