2016-03-15 139 views
1

我有幾個數組,我想合併成新的數組,但每個新數組需要從每個值有一個值。僅僅創建一個多維數組是不夠的。所以任何幫助都會很棒。從新組合的數組創建多維數組

我有這樣的陣列

Array ( 
    [0] => Array ( 
     [0] => Supplier 1 
     [1] => Supplier 1 
     [2] => Supplier 2 
    ) 

    [1] => Array ( 
     [0] => Product 1 
     [1] => Product 2 
     [2] => Product 3 
    ) 

    [2] => Array ( 
     [0] => 123456 
     [1] => 654321 
     [2] => 111111 
    ) 

    [3] => Array ( 
     [0] => 7 
     [1] => 40 
     [2] => 5 
    ) 
) 

但我需要它是這樣

Array (
    [0] => Array (
     [supplier] => Supplier 1 
     [descr] => Product 1 
     [partid] => 123456 
     [quantity] => 7 
    ) 

    [1] => Array (
     [supplier] => Supplier 1 
     [descr] => Product 2 
     [partid] => 654321 
     [quantity] => 40 
    ) 

    [2] => Array (
     [supplier] => Supplier 2 
     [descr] => Product 3 
     [partid] => 111111 
     [quantity] => 5 
    ) 
) 
+0

我還沒有太多嘗試,我只搜索一個類似的問題但找不到我可以使用的任何東西 – Bart

回答

1

可以使用PHP方法array_map [1]來執行此(假設原始的多維數組是在$arr):

$res = array_map(
    function ($lev, $oms, $num, $aan) { 
     return [ 
      'leverancier' => $lev, 
      'artikel_omschrijving' => $oms, 
      'artikelnummer' => $num, 
      'artikel_aantal' => $aan 
     ]; 
    }, 
    $arr[3], 
    $arr[1], 
    $arr[0], 
    $arr[2]); 

它的作用是遍歷所有n陣列在年底通過函數調用,並將每個數組中相同位置的條目傳遞給回調函數。

[1] http://php.net/manual/en/function.array-map.php

+0

謝謝!好的和簡單的解決方案 – Bart

+0

非常好的解決方案:) – RK12

1

試試這個:

<?php 

$input = array ( 
    '3'=>array ( 
     0 => '200046 - Aswo Service B.V.' , 
     1 => '200046 - Aswo Service B.V.' , 
     2 => '200013 - Weststrate verpakkingen' , 
    ), 

    '1'=>array ( 
     0 => 'Diode 1N 4007 1000V 1A' , 
     1 => 'Tyrap wit - 100x2,5mm' , 
     2 => 'Kartonnen doos 50x35x35 cm' , 
    ), 

    '0'=>array ( 
     0 => '11-00055' , 
     1 => '100538' , 
     2 => '100500' , 
    ), 

    '2'=>array ( 
     0 => '7' , 
     1 => '40' , 
     2 => '5' , 
    ) 
); 

$result = array(); 

$loopLength = count($input[0]); 

for($i = 0; $i < $loopLength; $i++) 
{ 
    $singleResult = array(); 
    $singleResult['leverancier'] = $input[3][$i]; 
    $singleResult['artikel_omschrijving'] = $input[1][$i]; 
    $singleResult['artikel_nummer'] = $input[0][$i]; 
    $singleResult['artikel_aantal'] = $input[2][$i]; 

    $result[] = $singleResult; 
} 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

輸出是:

Array 
(
    [0] => Array 
     (
      [leverancier] => 200046 - Aswo Service B.V. 
      [artikel_omschrijving] => Diode 1N 4007 1000V 1A 
      [artikel_nummer] => 11-00055 
      [artikel_aantal] => 7 
     ) 

    [1] => Array 
     (
      [leverancier] => 200046 - Aswo Service B.V. 
      [artikel_omschrijving] => Tyrap wit - 100x2,5mm 
      [artikel_nummer] => 100538 
      [artikel_aantal] => 40 
     ) 

    [2] => Array 
     (
      [leverancier] => 200013 - Weststrate verpakkingen 
      [artikel_omschrijving] => Kartonnen doos 50x35x35 cm 
      [artikel_nummer] => 100500 
      [artikel_aantal] => 5 
     ) 

) 
+0

像魅力一樣工作!謝謝 – Bart

+0

快樂是我的:)所以如果你喜歡我的回答(或其他用戶回答),請接受它作爲最佳答案:) – aslawin

0

統一解(對於任意數量的元素)與array_unshiftcall_user_func_arrayarray_maparray_combine功能:

// $arr is your initial array 

$keys = ['leverancier', 'artikel_omschrijving', 'artikelnummer', 'artikel_aantal']; 
array_unshift($arr, null); 

$res = call_user_func_array("array_map", $arr); 

$result = array_map(function($v) use (&$keys){ 
    return array_combine($keys, $v); 
}, $res); 

var_dump($result); // this will return the expected result 
array (size=3) 
    0 => 
    array (size=4) 
     'leverancier' => string '200046 - Aswo Service B.V.' (length=26) 
     'artikel_omschrijving' => string 'Diode 1N 4007 1000V 1A.' (length=23) 
     'artikelnummer' => string '11-00055' (length=8) 
     'artikel_aantal' => int 7 
    1 => 
    array (size=4) 
     'leverancier' => string '200046 - Aswo Service B.V.' (length=26) 
     'artikel_omschrijving' => string 'Tyrap wit - 100x2,5mm' (length=21) 
     'artikelnummer' => int 100538 
     'artikel_aantal' => int 40 
    2 => 
    array (size=4) 
     'leverancier' => string '200013 - Weststrate verpakkingen' (length=32) 
     'artikel_omschrijving' => string 'Kartonnen doos 50x35x35 cm' (length=26) 
     'artikelnummer' => int 100500 
     'artikel_aantal' => int 5