2011-08-29 30 views
3

我有兩個陣列如何推入多維數組的子數組?

$brands = Array (1=>a, 2=>b); 
$titles = Array (1=>d, 2=>e); 

,我要轉換爲一個二維陣列

$both = Array ([0] => Array ([brand] => a, [title] => d) [1] => Array ([brand] => b, [title] = d)); 

我可以使用一對用於循環爲此,每個以下形式的

$key_brand = 0; 

foreach ($brands as $brand) { 
    $both[$key_brand++]['brand'] = $brand; 
} 

但這看起來很笨拙,特別是如果我想合併很多像這樣的數組。我沒有看到任何我想要的standard php function。有沒有更好的方法來做到這一點?

+0

你的陣列的例子是PHP和print_r的結果的一些突變體.. –

+0

所以要合併兩個數組,並有內部陣列推?它非常難以理解,所要求的和你的例子只使用'$ brands'而不是'$ titles' .. –

+0

@Kalle H.Väravas是的,我有兩個數組,我想將它們合併爲一個數組,其中的每個元素本身都是一個數組,其中包含兩個原始數組中的每個元素的一個元素。我現在的做法是使用單獨的'foreach($品牌作爲$品牌)'和'foreach($ titles作爲$ title)'循環來填充所需的二維數組,每個原始1-二維數組,但我想知道是否有更乾淨的方法來做到這一點。 – jela

回答

4

我就開始把所有輸入信息的數組,所以你知道什麼是循環:

$old = array(
'brands' => Array (1=>a, 2=>b), 
'titles' => Array (1=>d, 2=>e) 
// etc 
); 

然後做一個雙循環:

$new = array(); 
foreach($old as $key => $value) 
{ 
    foreach ($value as $num_key => $content) 
    { 
    $new[$num_key][$key] = $content; 
    } 
} 

另外一個好處是,你保留您的原始數組鍵。

+0

謝謝,這完美的作品 – jela

2

這是我剛纔寫的,可能有所幫助。您在對指定的參數:

<?php 
$brands = array('Foo Global', 'Bar Global'); 
$titles = array('FooStar 1000', 'BarStar 1000'); 
$weights = array('400', '600'); 

function custom_array_merge() { 
    $args = func_get_args(); 
    $arg_len = count($args); 

    // Ensure there are no broken pairs. (Not a sophisticated check) 
    if ($arg_len < 2 || $arg_len % 2 != 0) 
     return FALSE; 

    $output = array(); 

    for ($i = 1; $i <= $arg_len;) { 
     $title = $args[$i-1]; 
     $values = $args[$i]; 
     foreach ($values AS $key => $value) { 
      $output[$key][$title] = $value; 
     } 
     $i += 2; 
    } 

    return $output; 
} 

echo "<pre>"; 
print_r(custom_array_merge('brand', $brands, 'title', $titles, 'weight', $weights)); 
echo "</pre>"; 


輸出示例:

Array 
(
    [0] => Array 
     (
      [brand] => Foo Global 
      [title] => FooStar 1000 
      [weight] => 400 
     ) 

    [1] => Array 
     (
      [brand] => Bar Global 
      [title] => BarStar 1000 
      [weight] => 600 
     ) 

) 
+0

謝謝,我結束了使用jeroen的稍簡單的方法,但這是非常有趣的閱讀和工作正常。我從來沒有用過func_get_args(),這很酷。 – jela