繁体   English   中英

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

[英]How to combine an array of keys with corresponding values from another 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]:两个参数应具有相同数量的元素

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

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

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

假设按照您列出的顺序排列$ array1和$ array2,我认为这会起作用:

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

尝试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));

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM