2016-08-15 5 views
1

Ich muss ein assoziatives Array von einem Mehrfachauswahl senden.Senden assoziative Array aus einem Multiple select

Ich habe diesen Code:

<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; ?> 

Und das produziert:

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

Ich brauche so etwas zu bekommen:

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

Ich bin nicht fähig, name/val zu produzieren ue in assoziativer Weise und nicht in numerischer Art und Weise, weil ich den Inhalt der Option nicht abrufen kann ($ page-> Seite)

Vielen Dank im Voraus

G

+1

es wird eine Liste von String-Werten, der Wert von '

Antwort

0

Wenn das Formular, das Sie vorgelegt wird in der Tat so etwas wie dieses Array in PHP erhalten:

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

Dies ist, wie es funktioniert, und ich würde dieses Verhalten nicht zu versuchen, vorschlagen zu ändern. Sie können dies jedoch in das assoziative Array Ihrer Wahl konvertieren.

Zuerst ein assoziatives Array für Ihre Seiten erstellen, so können Sie schnell die Seitennamen für eine bestimmte URL finden:

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

Sie bereits Ihre eingereichten Liste der ausgewählten Elemente. Ihr vorhandener Code wird so etwas wie diese:

$selected = $_POST['frontend_footer_menu_pages']; 

, nun dies das assoziative Array konvertieren Sie suchen, benutzen Sie einfach array_intersect mit dem Hash wir oben erstellt, und dann tauschen Schlüssel und Werte mit array_flip:

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

das Ergebnis wird so etwas wie diese:

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

Ich habe meine Antwort aktualisiert, um das Problem mit 'array_combine' zu ​​lösen. Jetzt wird der Hash in umgekehrter Richtung gemacht: * Seite * ist der Schlüssel und * URL * der Wert. Dann gibt 'array_intersect' die gewünschte Ausgabe. – trincot

+0

Jede Chance, die Sie eine Antwort akzeptieren werden? – trincot