【问题标题】:drop-down select from nested array从嵌套数组中下拉选择
【发布时间】:2019-02-15 11:21:09
【问题描述】:

我有嵌套数组 (3d),并希望使用 PHPjQuery 将其值放入下拉选择菜单中

我已经做了一些尝试,但仅适用于两个级别的数组,例如(类别,子类别),但是如果每个或某些子类别也有更多的子类别,这里是一个示例

$categories = array(
    'fruits' => array(
        'red' => array('one', 'two', 'three'),
        'yellow' => array('four', 'five', 'six'),
        'black' => array('seven', 'eight', 'nein'),
    ),
    'vegetables' => array(
        'blue' => array('een', 'twee', 'drie'),
        'white' => array('vier', 'funf', 'zex'),
        'mongo' => array('zibn', 'acht', 'noun'),
    )
);

我要做的是显示主要类别(fruits,vegetables)

<select name="food">
    <?php foreach ($categories as $category): ?>
        <option value="<?php echo $category; ?>"><?php echo $category; ?></option>
    <?php endforeach;?>
</select>

在选择 (change) 时,任何将显示我选择的类别的子类别的选择选项

然后在选择任何子类别时,它将显示其子子类别。

Image explain more

【问题讨论】:

  • 你想拥有类似的东西:跨度>
  • @MohammedYassineCHABLI 我添加了解释更多的图像,一个带有选项的下拉选择&lt;select&gt;&lt;option&gt;&lt;/option&gt;&lt;/select&gt; 一旦我选择任何主要类别,它将显示另一个选择选项来选择子类别,一旦我选择子类别它显示子子类别https://i.stack.imgur.com/LL9gL.png的另一个选择选项

标签: javascript php jquery


【解决方案1】:

嗯,可以这样做,

$categories = array(
    'fruits' => array(
        'red' => array('one', 'two', 'three'),
        'yellow' => array('four', 'five', 'six'),
        'black' => array('seven', 'eight', 'nein'),
    ),
    'vegtiable' => array(
        'blue' => array('een', 'twee', 'drie'),
        'white' => array('vier', 'funf', 'zex'),
        'mongo' => array('zibn', 'acht', 'noun'),
    )
);

// Funtion to generate select box (using single or multi-dimensional array)
function create_select($categories,$level=1,$parrent=''){
    $second_select = '';
    $select = '<select name="category" class="category '.($parrent ? $parrent : '').'" '.($parrent ? 'style="display:none;"' : '').' data-category-level="'.$level.'">';
    // loop through category
    foreach ($categories as $key => $cat) {
        if(is_array($cat)){
            $select .= '<option value="'.$key.'">'.$key.'</option>';
            // if it has sub-category then generate sub-select 
            $second_select .= create_select($cat,$level+1,$key);
        }else{
            $select .= '<option value="'.$cat.'">'.$cat.'</option>';
        }
    }
    // append sub-select to select
    $select .= '</select>'.$second_select;
    return $select;
}

print_r(create_select($categories));
?>

您将需要以下脚本来显示和隐藏子选择

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script type="text/javascript">
    $('.category').on('change',function(){
        var thisp = $(this);
        $('.category').each(function(){
            // check if it is sub-select of current select (using category-level)
            if($(this).data('category-level') > thisp.data('category-level')){
                if($(this).hasClass(thisp.val())){
                    // show only sub-select that has matching class
                    $(this).css('display','block');
                }else{
                    // hide all other sub-select
                    $(this).css('display','none');
                }
            }
        });
    });

</script>

【讨论】:

  • 这真是太棒了,这个功能很有帮助……非常感谢
  • 很高兴听到这个消息:)
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 2013-01-14
  • 2016-06-07
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多