views:

46

answers:

4

I have 2 arrays

Array ( [1] => Manufacturer [2] => Location [3] => Hours [4] => Model ) 

and

Array ( [Manufacturer] => John Deere [Location] => NSW [Hours] => 6320 ) 

I need to combine them and associate the values from the first array( Manufacturer, Location, hours , Model) as names in the 2nd array and if a specific values from the first array doesn't find associative name in the 2nd array to associate empty . For the example the result that I need from the above arrays is an array like this

   Array ( [Manufacturer] => John Deere [Location] => NSW [Hours] => 6320 [Model] => ) 

If i use simple array_combine it says that PHP Warning: array_combine() [function.array-combine]: Both parameters should have equal number of elements

A: 

Assuming $array1 and $array2 in order as you listed them, I think this would work:

$newArray = array();
while (list(,$data) = each($array1)) {
  if (isset($array2[$data])) {
     $newArray[$data] = $array2[$data];
  } else {
     $newArray[$data] = "";
  }
}
Fosco
+3  A: 

You can use a simple foreach loop:

$combined = array();
foreach ($keys as $key) {
    $combined[$key] = isset($values[$key]) ? $values[$key] : null;
}

Where $keys is your first array with the keys and $values is your second array with the corresponding values. If there is no corresponding value in $values the value will be null.

Gumbo
A: 

Try array_merge(). This example appears to do what you want:

<?php
$keys = array( 1 => "Manufacturer", 2 => "Location", 3 => "Hours", 4 => "Model") ;
$canonical = array_combine(array_values($keys), array_fill(0, count($keys), null));

$data = array("Manufacturer" => "John Deere", "Location" => "NSW", "Hours" => 6320);

print_r(array_merge($canonical, $data));
Bill Karwin
A: 

If the array of keys is $array1, and the associative array with values is $array2:

$new_array = array_merge(array_fill_keys(array_flip($array1), ''), $array2));

This inverts your key array, filling it with '' values. Then when you merge the arrays, any duplicate keys will be overwritten by the second array, but unfilled keys will remain.

jacobangel