2016-03-03 71 views
1

我想幾個陣列組合成一個,他們是一種形式後與未知數量的元素,如結果:PHP結合幾個陣列來一個

$ids = [53,54,55]; 
$names = ['fire','water','earth']; 
$temps = [500,10,5]; 

我要的是讓一個函數這需要這些陣列作爲輸入,併產生一個輸出,如

$elements = [['id'=>53,'name'=>'fire','temp'=>500] , ['id'=>54,'name'=>'water','temp'=>500] , ['id'=>55,'name'=>'earth','temp'=>500]] 

我想出了以下解決方案:

function atg($array) { 
    $result = array(); 
    for ($i=0;$i<count(reset($array));$i++) { 
     $newAr = array(); 
     foreach($array as $index => $val) { 
     $newAr[$index] = $array[$index][$i]; 
     } 
     $result[]=$newAr; 
    } 
    return $result; 
} 

它可以被稱爲像

$elements = atg(['id' => $ids, 'name' => $names, 'temp' => $temps]); 

而且它產生的右聲道輸出。對我來說,它似乎有點過於複雜,但我確信這是表單帖子的PHP中的常見問題,將單獨的字段組合成單個數組。什麼會是更好的解決方案?

+1

3x'temp => 500' in your output,typo? – Rizier123

回答

0

使用下面的代碼: -

$ids = [53,54,55]; 
$names = ['fire','water','earth']; 
$temps = [500,10,5]; 
$result = []; 
foreach($ids as $k=>$id){ 
    $result[$k]['id'] = $id; 
    $result[$k]['name'] =$names[$k]; 
    $result[$k]['temp'] = $temps[0]; 
} 
echo '<pre>'; print_r($result); 

輸出: -

Array 
(
    [0] => Array 
     (
      [id] => 53 
      [name] => fire 
      [temp] => 500 
     ) 

    [1] => Array 
     (
      [id] => 54 
      [name] => water 
      [temp] => 500 
     ) 

    [2] => Array 
     (
      [id] => 55 
      [name] => earth 
      [temp] => 500 
     ) 

) 
-1
$result[$ids]['name'] = $names[0]; 
$result[$ids]['temp'] = $temps[0] 
+3

你能解釋你的答案嗎? – Will

2

你可以通過你所有的3個數組的循環在與array_map()一次。在那裏你可以返回新數組,每個數組的值都是3

$result = array_map(function($id, $name, $temp){ 
    return ["id" => $id, "name" => $name, "temp" => $temp]; 
}, $ids, $names, $temps); 
+0

尼斯答案:)你的輸出改變了臨時值,但OP已經將它作爲第一個索引500發佈到其他數組中。 –

+0

@RaviHirani由於OP的代碼沒有實現,他說他得到正確的輸出,我認爲這只是一個錯字,但只是爲了確保我在OP的問題下寫了一條評論。 – Rizier123

+0

好的。我也強調了它。我也假設它是Typo。然後我需要改變我的答案:D –

0

如果你都OK了破壞性的解決方案,array_shift可以做的伎倆:

$elements = array(); 
while (!empty($ids)) { 
    $elements[] = array(
    'id' => array_shift($ids), 
    'name' => array_shift($names), 
    'temp' => array_shift($temps), 
    ); 
} 

如果你想使一個功能,使用比你的例子相同的參數,一個解決方案是

function atg($array) { 
    $elements = array(); 

    while (!empty($array[0])) { 
    $new_element = array(); 
    foreach ($array as $key_name => $array_to_shift) { 
     $new_element[$key_name] = array_shit($array_to_shift); 
    } 
    $elements[] = $new_element; 
    } 
    return $elements; 
}