Mergin两个数组,但保留索引

时间:2017-09-22 20:57:11

标签: php arrays

所以我需要将这两个数组合并为一个并保留索引。我尝试了array_mergearray_merge_recursive等不同的东西,但我无法理解。

array(3) {
  [0]=>
  string(4) "Peter"
  [1]=>
  string(4) "Josh"
  [2]=>
  string(4) "Jasper"
}
array(3) {
  [0]=>
  string(2) "18"
  [1]=>
  string(2) "19"
  [2]=>
  string(2) "25"
}

这就是我希望它的样子:

array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(5) "Peter"
    ["age"]=>
    int(18)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(4) "Josh"
    ["age"]=>
    int(19)
  }
}

我是如何实现这一目标的?

2 个答案:

答案 0 :(得分:3)

试试这个:

$array1 = array(0 => 'Peter', 1 => 'Josh', 2 => 'Jasper');
$array2 = array(0 => '18', 1 => '19', 2 => '25');
for($i = 0; $i<count($array1); $i++){
   $newArray[] = array("name" => $array1[$i], "age" => $array2[$i]);
}
var_dump($newArray);

答案 1 :(得分:1)

这是我之前使用过的更可重复的决定,以防您想要添加名称,年龄,电子邮件或其他更新的内容。

在代码下方发布解释性评论。

<?php

// Array containing names
$namesArr = array(
    'Peter', 
    'Josh', 
    'Jasper'
);

// Array containing ages
$agesArr = array(
    18,
    19,
    25
);

$arrayDesign = array(
    'name' => $namesArr, 
    'age'  => $agesArr
);

/**
 * Combines given array design into one grouped by keys.
 * Example Input:
 *      $design => array(
 *          'name' => array('Name1', 'Name2'), 
 *          'age'  => array(10, 20)
 *      );
 * Example Output:
 *      $output => array(
 *          0 => array(
 *              'name' => 'Name1', 
 *              'age' => 10
 *          ), 
 *          1 => array(
 *              'name' => 'Name2', 
 *              'age' => 20
 *          )
 *      );
 * 
 * @param Array $arrayDesign
 * 
 * @return Array combined array
 */
function combineArraysByKeys($arrayDesign) {

    // Holds results
    $results = array();

    // Get size of first element from the design, so we'll know the size of rest elements.
    $designElementSize = count($arrayDesign[array_keys($arrayDesign)[0]]);

    // Count from-to elements
    for($c = 0; $c < $designElementSize; $c++) {

        // Define array as part of results to be added after population
        $arrayPart = array();

        // Loop thru all keys and get values
        foreach(array_keys($arrayDesign) as $key) {

            // Assign value to key
            $arrayPart[$key] = $arrayDesign[$key][$c];
        }

        // Add to results array
        $results[] = $arrayPart;
    }

    return $results;
}

$result = combineArraysByKeys($arrayDesign);

echo "<PRE>";
print_r($result);
die();