Search code examples
phparraysgroupingmerging-data

Restructuring Multi Dimensional Array Format


I am struggling with what would appear to be a pretty straight forward task. I have looked at and tried all kinds of functions and suggestion on SO hoping that maybe there is something simple and functional out there. Nothing I tried gives me the logic to do the restructuring.

I have a long complex array. However very much simplified the logic problem I am trying to solve generically is as follows:

$cost_type = Array
(
    0 => "ISP2",
    1 => "ISP3",
    2 => "ISP4"
);
$supplier_name  = Array
(
    0 => "NAME-A",
    1 => "NAME-B",
    2 => "NAME-C"
 );
$propertyid = Array
(
    0 => "property1",
    1 => "property2",
    2 => "property2"
);

and I need to convert it to the following set of arrays (noting the concatenation of the two arrays with a common property id.....

 $property1
 (
    array['charges']  
            [0] =>IPS2

   array ['names']
            [0] =>NAME-A
 )

 $property2
 (
   array['charges'] 
           [0] ->IPS3
           [1] =>IPS4

   array['names']
         [0] =>NAME-B
         [1] =>NAME-c
 ) 

I have tried everything over the course of the last few hours and a simple solution totally evades me.


Solution

  • If you can join the three arrays as you say in comments above this code will generate the look you want.
    I loop through the array with property and keep key as the key to find names and charges in the other subarrays.

    $cost_type = Array
    (
        0 => "ISP2",
        1 => "ISP3",
        2 => "ISP4"
    );
    $supplier_name  =Array
    (
        0 => "NAME-A",
        1 => "NAME-B",
        2 => "NAME-C"
     );
    $propertyid = Array
    (
        0 => "property1",
        1 => "property2",
        2 => "property2"
    );
    $arr[] = $cost_type;
    $arr[] = $supplier_name;
    $arr[] = $propertyid;
    
    $result = array();
    Foreach($arr[2] as $key => $prop){
        $result[$prop]["charges"][] =$arr[0][$key];
        $result[$prop]["names"][] = $arr[1][$key];
    }
    
    Var_dump($result);
    

    https://3v4l.org/EilvE