簡體   English   中英

從新組合的數組創建多維數組

[英]Create multidimensional array from newly combined arrays

我有幾個要合並為新數組的數組,但是每個新數組都需要每個值都有一個值。 僅創建多維數組是不夠的。 因此,任何幫助都會很棒。

我有這個數組

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

嘗試這個:

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

)

您可以使用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/zh/function.array-map.php

帶有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM