从多个选择中发送关联数组

时间:2016-08-15 22:31:17

标签: php arrays forms multi-select

我需要从多个选择中发送一个关联数组。

我有这段代码:

<select name="frontend_footer_menu_pages[]" id="frontend_footer_menu_pages" class="form-control" multiple>
<?php foreach($pages as $page): ?>
    <option value="<?php echo $page->url; ?>">
        <?php echo $page->page; ?>
    </option>
<?php endforeach; ?>

这就产生了:

Array(
[0] => first/page, 
[1] => second/page
)

我需要获得这样的东西:

Array(
['first/page'] => 'First Page',
['second/page'] => 'Second Page']
);

我无法以关联方式生成名称/值,而不能以数字方式生成,因为我无法检索选项的内容($ page-&gt; page)

提前谢谢

1 个答案:

答案 0 :(得分:0)

提交表单时,您确实会在PHP中获得类似这样的数组:

Array(
    [0] => first/page, 
    [1] => second/page
)

这是它的工作原理,我不建议尝试改变这种行为。但是,您可以将其转换为您喜欢的关联数组。

首先为您的页面创建一个关联数组,这样您就可以快速找到给定网址的页面名称:

// Create hash for the pages, keyed by their page name:
foreach ($pages as $page) {
    $pageHash[$page->page] = $page->url;
}

您已经提交了所选项目的列表。您现有的代码将具有以下内容:

$selected = $_POST['frontend_footer_menu_pages'];

现在,要将此转换为您要查找的关联数组,只需将array_intersect与我们在上面创建的哈希一起使用,然后使用array_flip交换键和值:

$selected = array_flip(array_intersect($pageHash, $selected));

结果将是这样的:

Array
(
    [first/page] => First Page
    [second/page] => Second Page
)