合并两个关联数组添加标题

时间:2013-11-19 08:06:39

标签: php arrays json associative-array

我有两个数组

$Array_1 = array(
    'ID_1' => 'Michael', 
    'ID_2' => 'Jerry', 
    'ID_3' => 'Tony', 
    'ID_4' => 'Roger',
);

$Array_2 = array(
    'ID_1' => 'Chef', 
    'ID_2' => 'Mechanic',
    'ID_3' => 'Cook', 
    'ID_4' => 'Dealer',
);

我希望将它们合并到ID列上,并使我的最终数组以这种形式

$employees = array(
    array(
        'name' => 'Jason',
        'occupation' => 'Chef'
    ),
    array(
        'name' => 'Mike',
        'occupation' => 'Mechanic'
    ),
    ...
);

我知道我可以将它们组合起来,如下所示:

$new_array = array_combine(array_values($Array_1), array_values($Array_2));

但我如何添加标题"姓名":和#34;职业":

5 个答案:

答案 0 :(得分:3)

你能试试吗,

  $Employees = array();
  foreach($Array_1 as $key=>$value):   
    $Employees['Employees'][] =  array('Name'=>$value, 'Occupation'=>$Array_2[$key]);
  endforeach;

  echo "<pre>";
    print_r($Employees);
  echo "</pre>";

  echo json_encode($Employees);

OP:

 {"Employees":[{"Name":"Jason","Occupation":"Chef"}, {"Name":"Mike","Occupation":"Mechanic"}]}

答案 1 :(得分:3)

我不知道阵列的样子。但你可以尝试我的两个解决方案

第一个解决方案

$array1 = array("id" => array("id1", "id2", "id3"), "names" => array("name1", "name2", "name3"));
$array2 = array("id" => array("id1", "id2", "id3"), "occupation" => array("occupation1", "occupation2", "occupation3"));
$filter_array = array("employees" => array());
foreach ($array1["id"] as $index => $key) {
    $employee = array();
    $occupation = in_array($key, $array2["id"]) ? $array2["occupation"][$index] : false;
    if ($occupation === false) {
        continue;
    }
    $employee["name"] = $key;
    $employee["occupation"] = $occupation;
    array_push($filter_array["employees"], $employee);
}
echo "<pre>" . print_r($filter_array, true) . "</pre>";

第二个解决方案

$array1 = array("id1" => array("names" => "name1"), "id2" => array("names" => "name2"), "id3" => array("names" => "name3"));
$array2 = array("id1" => array("occupation" => "occupation1"), "id2" => array("occupation" => "occupation2"), "id3" => array("occupation" => "occupation3"));
$filter_array = array("employees" => array());
foreach ($array1 as $key => $value) {
    $employee = array();
    if (!isset($array2[$key])) {
        continue;
    }
    $employee["name"] = $value["names"];
    $employee["occupation"] = $array2[$key]["occupation"];
    array_push($filter_array["employees"], $employee);
}

echo "<pre>" . print_r($filter_array, true) . "</pre>";

我希望我的代码可以提供帮助。

答案 2 :(得分:3)

你可以试试这个

$Array_1 = array(
    'ID_1' => 'Michael', 
    'ID_2' => 'Jerry', 
    'ID_3' => 'Tony', 
    'ID_4' => 'Roger',
);

$Array_2 = array(
    'ID_1' => 'Chef', 
    'ID_2' => 'Mechanic',
    'ID_3' => 'Cook', 
    'ID_4' => 'Dealer',
);
$filter_array = array("employees" => array());
foreach($Array_1 as $key => $value){
    $employee = array();
    if(!isset($Array_2[$key])){ continue; }
    $employee["name"] = $value;
    $employee["occupation"] = $Array_2[$key];
     array_push($filter_array["employees"], $employee);

}

答案 3 :(得分:2)

编辑2 啊啊,现在我在评论和OP的编辑中看到了phpfiddle。那么,ID已经是数组的关键? ......然后就这样做

foreach($Array_1 as $key_1 => $value_1) {
    $new_Array[$key_1]['Names'] = $Array_1['Names'];
}
foreach($Array_2 as $key_2 => $value_2) {
    $new_Array[$key_2]['Occupation'] = $Array_2['Occupation'];
}

答案 4 :(得分:0)

使用array_walk。它为每个数组项运行一个函数。将它们组合在函数中。