1

I have three arrays as follows:

Array
(
    [1000] => Item 0
    [1001] => Item 1
    [1002] => Item 2
)

Array
(

    [1000] => £35.00
    [1001] => £60.00
    [1002] => £24.00
)
Array
(
    [1000] => 1
    [1001] => 2
    [1002] => 3
)

I need to merge these three arrays preserving the keys as follows:

Array
(
    [1000] => Array
                (
                    [0] => Item 0
                    [1] => £35.00
                    [2] => 1
                )
    [1001] => Array
                (
                    [0] => Item 1
                    [1] => £60.00
                    [2] => 2
                )
    [1002] => Array
                (
                    [0] => Item 2
                    [1] => £24.00
                    [2] => 3
                )
)

array_map(null, array1, array2, array3) solves it to some level but doesn't preserves the keys. How can it be done?

Cœur
  • 37,241
  • 25
  • 195
  • 267

3 Answers3

0

Try this code, save one array keys in another array and fill keys after merged array

$array1_keys = array_keys($array1);
$mapped_array = array_map(null, $array1, $array2, $array3);
//now assign original keys
$merged_final_array = array_fill_keys($array1_keys, $mapped_array);

DEMO

Girish
  • 11,907
  • 3
  • 34
  • 51
0

You could wrap your array_map together with an array_keys() against your original array within an array_combine()

$array1 = array(
    1000 => 'Item 0',
    1001 => 'Item 1',
    1002 => 'Item 2',
);
$array2 = array(
    1000 => '£35.00',
    1001 => '£60.00',
    1002 => '£24.00',
);
$array3 = array(
    1000 => 1,
    1001 => 2,
    1002 => 3,
);

$result = array_combine(
    array_keys($array1),
    array_map(null, $array1, $array2, $array3)
);
var_dump($result);
Mark Baker
  • 209,507
  • 32
  • 346
  • 385
0

I hope this code will help you:

$one =Array(    "1000" => "£35.00","1001" => "£60.00","1002" => "£24.00","1003" => "£36.00","1004" => "£80.00","1005" => "£24.00");
$two = array("1000"=>"1","1001"=>"2","1002"=>"3","1003"=>"4","1004"=>"5","1005"=>"6");
$response = array();
foreach(array_keys($one) as $key =>$val)
{
    $response[$val] = array(0=>"item ".$key,1=>$one[$val],2=>$two[$val]);
}
echo "<pre>";print_R($response);
Vishal Patel
  • 1,715
  • 16
  • 26