简体   繁体   中英

Merging associative arrays with specific key

I have a little problem with arrays. I have a few arrays like the one below as a result of a query. like 25 pcs of array

[2] => Array
    (
        [id] => 15
        [oem_reference] => 5972277
        [description] => TIMING TENSIONER
        [brand] => LANCIA
        [old_reference] => 25102277
        [factory_reference] => TM102277.jpg
        [prod_date] => 2014/06
        [model] => DEDRA-DELTAII-Y10-Y-YPSILON
        [engine] => 1,6 i.e-1,6-1,4i.e-1,0-1,1 i.e-1,1-1,3i.e-1,2
        [year] => 85-11
        [other_cross_ref] => 
        [ref1] => GT 80290
        [ref2] => T41121
        [ref3] => ATB2240
        [ref4] => VKM 12200
        [ref5] => 531 0005 10
        [ref5_x] => 531000510
        [ref6] => 55801
        [complete] => 
        [note] => 
        [type] => TIMING
        [out_d1] => 57.00
        [out_d2] => 0.00
        [h1] => 24.00
        [h2] => 0.00
        [in_d1] => 30.00
        [in_d2] => 0.00
    )

[3] => Array
    (
        [id] => 34
        [oem_reference] => 5972277
        [description] => TIMING TENSIONER
        [brand] => FIAT
        [old_reference] => 25102277.1
        [factory_reference] => TM102277.1.jpg
        [prod_date] => 2014/06
        [model] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO
        [engine] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4
        [year] => 82->
        [other_cross_ref] => 
        [ref1] => GT 80290
        [ref2] => T41121
        [ref3] => ATB2240
        [ref4] => VKM 12200
        [ref5] => 531 0005 10
        [ref5_x] => 531000510
        [ref6] => 55801
        [complete] => 
        [note] => 
        [type] => TIMING
        [out_d1] => 57.00
        [out_d2] => 0.00
        [h1] => 24.00
        [h2] => 0.00
        [in_d1] => 30.00
        [in_d2] => 0.00
    )

[4] => Array
    (
        [id] => 36
        [oem_reference] => 5972277
        [description] => TIMING TENSIONER
        [brand] => INNOCENTI
        [old_reference] => 25102277.1
        [factory_reference] => TM102277.1.jpg
        [prod_date] => 2014/06
        [model] => ELBA-MILLE
        [engine] => 1.0-1.3-1.4i.e-1.6i.e
        [year] => 92->
        [other_cross_ref] => INA F-36261
        [ref1] => GT 80290
        [ref2] => T41121
        [ref3] => ATB2240
        [ref4] => VKM 12200
        [ref5] => 531 0005 10
        [ref5_x] => 531000510
        [ref6] => 55801
        [complete] => 
        [note] => 
        [type] => TIMING
        [out_d1] => 57.00
        [out_d2] => 0.00
        [h1] => 24.00
        [h2] => 0.00
        [in_d1] => 30.00
        [in_d2] => 0.00
    )

[5] => Array
    (
        [id] => 38
        [oem_reference] => 5972277
        [description] => TIMING TENSIONER
        [brand] => LANCIA
        [old_reference] => 25102277.1
        [factory_reference] => TM102277.1.jpg
        [prod_date] => 2014/06
        [model] => DEDRA-DELTAII-Y10-Y-YPSILON
        [engine] => 1,6 i.e-1,6-1,4i.e-1,0-1,1 i.e-1,1-1,3i.e-1,2
        [year] => 85-11
        [other_cross_ref] => 
        [ref1] => GT 80290
        [ref2] => T41121
        [ref3] => ATB2240
        [ref4] => VKM 12200
        [ref5] => 531 0005 10
        [ref5_x] => 531000510
        [ref6] => 55801
        [complete] => 
        [note] => 
        [type] => TIMING
        [out_d1] => 57.00
        [out_d2] => 0.00
        [h1] => 24.00
        [h2] => 0.00
        [in_d1] => 30.00
        [in_d2] => 0.00
    )

I want to merge this arrays by taking factory_reference as a key

I need outputs like this arrays.

 [0] => Array
[id] => Array
    (
        [0] => 8

    )

[oem_reference] => Array
    (
        [0] => 561 9217

    )

[description] => Array
    (
        [0] => TIMING TENSIONER

    )

[brand] => Array
    (
        [0] => FIAT

    )

[old_reference] => Array
    (
        [0] => 25102277

    )

[factory_reference] => Array
    (
        [0] => TM102277.jpg

    )

[prod_date] => Array
    (
        [0] => 2014/06
    )

[model] => Array
    (
        [0] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO

    )

[engine] => Array
    (
        [0] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4

    )

[year] => Array
    (
        [0] => 82->

    )

[other_cross_ref] => Array
    (
        [0] => 

    )

[ref1] => Array
    (
        [0] => GT 80290

    )

[ref2] => Array
    (
        [0] => T41121
    )

[ref3] => Array
    (
        [0] => ATB2240
    )

[ref4] => Array
    (
        [0] => VKM 12200

    )

[ref5] => Array
    (
        [0] => 531 0005 10

    )

[ref5_x] => Array
    (
        [0] => 531000510

    )

[ref6] => Array
    (
        [0] => 55801

    )

[complete] => Array
    (
        [0] => 

    )

[note] => Array
    (
        [0] => 

    )

[type] => Array
    (
        [0] => TIMING

    )

[out_d1] => Array
    (
        [0] => 57.00

    )

[out_d2] => Array
    (
        [0] => 0.00

    )

[h1] => Array
    (
        [0] => 24.00

    )

[h2] => Array
    (
        [0] => 0.00

    )

[in_d1] => Array
    (
        [0] => 30.00

    )

[in_d2] => Array
    (
        [0] => 0.00

    )

)

[1] => Array [id] => Array ( ( [0] => 8 [1] => 31 [2] => 1553 [3] => 1576

    )

[oem_reference] => Array
    (
        [0] => 561 9217
        [1] => 561 9217
        [2] => 561 9217
        [3] => 561 9217

    )

[description] => Array
    (
        [0] => TIMING TENSIONER
        [1] => TIMING TENSIONER
        [2] => TIMING TENSIONER
        [3] => TIMING TENSIONER

    )

[brand] => Array
    (
        [0] => FIAT
        [1] => FIAT
        [2] => FIAT
        [3] => FIAT

    )

[old_reference] => Array
    (
        [0] => 25102277
        [1] => 25102277.1
        [2] => 25102277
        [3] => 25102277.1

    )

[factory_reference] => Array
    (
        [0] => TM102277.1.jpg
        [1] => TM102277.1.jpg
        [2] => TM102277.1.jpg
        [3] => TM102277.1.jpg

    )

[prod_date] => Array
    (
        [0] => 2014/06
        [1] => 2014/06
        [2] => 2014/06
        [3] => 2014/06

    )

[model] => Array
    (
        [0] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO
        [1] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO
        [2] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO
        [3] => CINQUECENTO-DOBLO-ELBA-FIORINO-PALIO-PANDA-PUNTO-SCUDO-SEICENTO-ALBEA-STRADA-TEMPRA-TIPO-UNO-DUCATO

    )

[engine] => Array
    (
        [0] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4
        [1] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4
        [2] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4
        [3] => 1,2-1,4-1,6-1,1-1,3-1,4-1,0-1,1 4*4-1,2 4*4-1,4 GT-1,4 i.e-1,6 i.e-2,5D-2,5 4*4

    )

[year] => Array
    (
        [0] => 82->
        [1] => 82->
        [2] => 82->
        [3] => 82->

    )

[other_cross_ref] => Array
    (
        [0] => 
        [1] => 
        [2] => 
        [3] => 

    )

[ref1] => Array
    (
        [0] => GT 80290
        [1] => GT 80290
        [2] => GT 80290
        [3] => GT 80290            
    )

[ref2] => Array
    (
        [0] => T41121
        [1] => T41121
        [2] => T41121
        [3] => T41121            
    )

[ref3] => Array
    (
        [0] => ATB2240
        [1] => ATB2240
        [2] => ATB2240
        [3] => ATB2240            
    )

[ref4] => Array
    (
        [0] => VKM 12200
        [1] => VKM 12200
        [2] => VKM 12200
        [3] => VKM 12200            
    )

[ref5] => Array
    (
        [0] => 531 0005 10
        [1] => 531 0005 10
        [2] => 531 0005 10
        [3] => 531 0005 10           
    )

[ref5_x] => Array
    (
        [0] => 531000510
        [1] => 531000510
        [2] => 531000510
        [3] => 531000510            
    )

[ref6] => Array
    (
        [0] => 55801
        [1] => 55801
        [2] => 55801
        [3] => 55801          
    )

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

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

[type] => Array
    (
        [0] => TIMING
        [1] => TIMING
        [2] => TIMING
        [3] => TIMING           
    )

[out_d1] => Array
    (
        [0] => 57.00
        [1] => 57.00
        [2] => 57.00
        [3] => 57.00           
    )

[out_d2] => Array
    (
        [0] => 0.00
        [1] => 0.00
        [2] => 0.00
        [3] => 0.00            
    )

[h1] => Array
    (
        [0] => 24.00
        [1] => 24.00
        [2] => 24.00
        [3] => 24.00           
    )

[h2] => Array
    (
        [0] => 0.00
        [1] => 0.00
        [2] => 0.00
        [3] => 0.00            
    )

[in_d1] => Array
    (
        [0] => 30.00
        [1] => 30.00
        [2] => 30.00
        [3] => 30.00            
    )

[in_d2] => Array
    (
        [0] => 0.00
        [1] => 0.00
        [2] => 0.00
        [3] => 0.00            
    )
)

I want to merge arrays with the same factory_reference . I wonder if there are masters who can help me with this?

You should start with something like this:

<?php
$data = [your_input_array];

$merged = array();

foreach($data as $element) {
   foreach($element as $field=>$value) {
      $merged[$element['factory_reference']][$field][]=$value;
   }
}

of course you should add code to check for empty fields/values. This will create assoc array with factory_reference as a key and merged by factory_reference.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM