2016-08-15 5 views
1

Мне нужно отправить ассоциативный массив из нескольких select.Отправить ассоциативный массив из нескольких 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'] 
); 

Я не способный производить имя/val у.е в ассоциативной, а не по числовым способом, потому что я не могу получить содержимое опции ($ PAGE-> страница)

Спасибо заранее

G

+1

он будет посылать список строковых значений, то значение из '<опции значения =«» ', а не ассоциативное iative array. – developerwjk

ответ

0

Когда форма отправлена ​​вам будет действительно получить что-то вроде этого массива в PHP:

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

Вот как это работает, и я не хотел бы предложить, чтобы попытаться изменить это поведение. Однако вы можете преобразовать это в ассоциативный массив по своему вкусу.

Сначала создайте ассоциативный массив для ваших страниц, так что вы можете быстро найти название страницы для данного URL:

// 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 
) 
+0

Я обновил свой ответ, чтобы решить проблему с помощью 'array_combine'. Теперь хэш сделан в противоположном смысле: * page * - это ключ и * url * значение. Тогда 'array_intersect' выдаст желаемый результат. – trincot

+0

Вы можете принять любой ответ? – trincot

Смежные вопросы