phparraysmultidimensional-arraytransposeassociative-array

Transpose two flat arrays into one indexed array with associative rows


Using PHP I need to merge 2 arrays (of equal length into one associative array) here is an excerpt from my current data set:

[1] => Array
    (
        [0] => C28
        [1] => C29
    )

[2] => Array
    (
        [0] => 1AB010050093
        [1] => 1AB008140029
    )

both elements [1] and [2] are actually a lot longer than just 2 sub-elements (like I said, this is an excerpt).

The deal is that "C28" in the first array corresponds to "1AB010050093" in the second array, and so on... The result I need is to create a new associative array that looks like this:

[1] => Array    
    (
        ['ref']  => C28
        ['part'] => 1AB010050093
    )
[2] => Array
    (
        ['ref'] => C29
        ['part'] => 1AB008140029
    )

and so on...


Solution

  • If you are willing to compromise with an array structure like this:

    array(
        'C28' => '1AB010050093',
        'C29' => '1AB008140029'
    );
    

    Then you can use the array_combine() (Codepad Demo):

    array_combine($refNumbers, $partIds);
    

    Otherwise, you'll need to use a foreach (Codepad Demo):

    $combined = array();
    
    foreach($refNumbers as $index => $refNumber) {
        if(!array_key_exists($index, $partIds)) {
            throw OutOfBoundsException();
        }
    
        $combined[] = array(
            'ref'  => $refNumber,
            'part' => $partIds[$index]
        );
    }