2012-11-13 4 views
9

Ho 3 matrici, solo 7 elementi ciascuna. Gli array sono:Come unire 3 matrici in un singolo array associativo in PHP

filename[]

title[]

description[]

voglio esprimere e scorrere un singolo array associativo per ciascuno dei dati nelle matrici di cui sopra. filename può essere il valore chiave per l'array assoc, ma ogni nome file ha il titolo e la descrizione corrispondenti.

Di seguito è riportato un esempio di:

var_dump($filename) 
    string(10) "IMG_1676_3" [1]=> 
    string(10) "IMG_0539_3" [2]=> 
    string(8) "IMG_1942" [3]=> 
    string(8) "IMG_1782" [4]=> 
    string(8) "IMG_2114" [5]=> 
    string(8) "IMG_9759" [6]=> 
    string(8) "IMG_2210" } 

var_dump($title) 
    string(31) "Lighthouse at Ericeira Portugal" [1]=> 
    string(23) "Gaudi park in Barcelona" [2]=> 
    string(32) "Driving around outside of Lisbon" [3]=> 
    string(16) "Madeira Portugal" [4]=> 
    string(15) "Barcelona Spain" [5]=> 
    string(15) "Lisbon Portugal" [6]=> 
    string(14) "Sailing Lisbon" } 

risposta

6
function mergeArrays($filenames, $titles, $descriptions) { 
    $result = array(); 

    foreach ($filenames as $key=>$name) { 
     $result[] = array('filename' => $name, 'title' => $titles[$key], 'descriptions' => $descriptions[ $key ]); 
    } 

    return $result; 
} 

Basta fare in modo che si passa input valido per la funzione, o di aggiungere qualche controllo in più. E 'quello che stai cercando?

+0

Come posso chiamare il titolo o la descrizione dei miei dati campo di '$ res ult [0] '? – GivenPie

+0

'$ result [0] ['title']' o '$ result [0] ['description']' –

0

Prova questa

$result = array_combine($filename, array_map(null, $title, $description)); 
var_dump($result); 

O se avete bisogno la matrice interna per essere associativo.

$result = array_combine($filename, 
    array_map(function($t, $d) { 
     return array('title'=>$t, 'description'=>$d); 
    }, $title, $description 
) 
); 

Se si desidera solo per combinare i tre matrici

$result = array_map(function($f, $t, $d) { 
    return array('filename'=>$f, 'title'=>$t, 'description'=>$d); 
    }, $filename, $title, $description 
); 
4

Se chiave dell'array sono gli stessi per tutti i 3 array, il modo migliore per fare ciò che si sta chiedendo, è una creazione foreach un nuovo array con tutta la chiave (nome del file, titolo, descrizione) nella stessa chiave:

<?php 
foreach($filename as $key => $file) 
{ 
    $files[$key]['filename'] = $file; 
    $files[$key]['title'] = $title[$key]; 
    $files[$key]['description'] = $description[$key]; 
} 
?> 
+0

Mi piace molto la tua logica, penso che questo meriti la risposta migliore. – GivenPie

-1
$array1 = array("orange", "apple", "grape"); 
$array2 = array("peach", 88, "plumb"); 
$array3 = array("lemon", 342); 
$newArray = array_merge($array1, $array2, $array3); 
foreach ($newArray as $key => $value) { 
    echo "$key - <strong>$value</strong> <br />"; 
} 
+0

Questa soluzione non soddisfa il requisito nella domanda. – automatix