如何将一组键与另一个数组中的相应值组合?

时间:2010-08-18 17:52:05

标签: php arrays associative-array

我有2个数组  

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

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

我需要将它们组合起来并将第一个数组(制造商,位置,小时,模型)中的值与第二个数组中的名称相关联,如果第一个数组中的特定值在第二个数组中找不到关联名称关联空。对于该示例,我需要来自上述数组的结果是像这样的数组

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

如果我使用简单的array_combine,则表示PHP警告:array_combine()[function.array-combine]:两个参数应该具有相同数量的元素

4 个答案:

答案 0 :(得分:3)

您可以使用简单的foreach循环:

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

$keys是第一个包含键的数组,而$values是第二个包含相应值的数组。如果$values中没有相应的值,则值为null

答案 1 :(得分:0)

假设$ array1和$ array2按顺序排列,我认为这样可行:

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

答案 2 :(得分:0)

试试array_merge()。此示例似乎可以执行您想要的操作:

<?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));

答案 3 :(得分:0)

如果键数组是$ array1,并且带有值的关联数组是$ array2:

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

这会反转你的键阵列,并用''值填充它。然后,当您合并数组时,第二个数组将覆盖任何重复的键,但未填充的键将保留。