2017-09-22 69 views
-1

所以我有這兩個數組,我需要合併成一個,並保持索引。我嘗試了不同的東西,如array_merge,array_merge_recursive等,但我無法弄清楚。Mergin兩個數組,但保留索引

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) 
    } 
} 

任何想法我怎麼能做到這一點?

+1

foreach或for循環可能是最好的選擇。 – aynber

+0

當然,我做了一個努力,我已經解釋了我所嘗試過的。爲什麼你認爲我沒有理由不投票給我? :( – user3628807

+0

好的,我用for循環做了。感謝@aynber的頭像! – user3628807

回答

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); 
+0

是的,在aynber給了我上面的評論之後,我想出了幾乎相同的解決方案,謝謝老兄!作爲有用的方式:) – user3628807

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