Как объединить 3 массива в один ассоциативный массив в PHP

у меня есть 3 массива, всего 7 элементов в каждом. Массивы:

filename[]

title[]

description[]

Я хочу выразить и повторить через один ассоциативный массив для каждого из данных в массивах выше. filename может быть ключевым значением для массива assoc, но каждое имя файла имеет свой собственный соответствующий заголовок и описание.

Ниже приведен пример:

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" }

4 ответов


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

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

    return $result;
}

просто убедитесь, что вы передаете действительный ввод функции или добавляете дополнительную проверку. Это то, что ты ищешь?


Если вы ключ массива одинаковы для всех 3 массивов, лучший способ сделать то, что вы просите, - это создать новый массив со всеми ключами(имя файла,название, описание) в одном ключе:

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

попробуй такое

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

или если вам нужно, чтобы внутренний массив был ассоциативным.

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

Если вы просто хотите объединить три массива

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

$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 />"; 
}