9

I have 3 arrays, just 7 elements in them each. Arrays are:

filename[]

title[]

description[]

I want to express and iterate through a single associative array for each of the data in the arrays above. filename can be the key value for the assoc array, but each filename has it's own corresponding title and description.

Below is a sample of:

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 Answers 4

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

Just make sure you pass valid input to the function, or add some extra checking. Is that what you're looking for?

Sign up to request clarification or add additional context in comments.

2 Comments

How can I call the title or the description of my data field of $result[0]?
$result[0]['title'] or $result[0]['description']
5

If you array key are the same for all the 3 arrays, the better way to do what you are asking, is a foreach creating a new array with all the key(filename,title,description) in the same key:

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

1 Comment

I really like your logic, I think this deserves top answer.
0

Try this

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

Or if you need the inner array to be associative.

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

If you just want to combine the three arrays

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

Comments

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

1 Comment

This solution doesn't meet the requirement in the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.