ymakux
ymakux

Reputation: 3485

Transform flat array to multidimensional array

Use PHPExel to parse XLS file. It does the following array structure:

Array(

    [0] => Array(
            [A] => City 1
            [B] => NULL
            [C] => NULL
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
        )

    [1] => Array(
            [A] => City 1 - Sell Department Phone
            [B] => NULL
            [C] => 123-123-123
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
          )

    [2] => Array(
            [A] => Stock 1
            [B] => Stock 1 Address
            [C] => Stock 1 Phone
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
          )

    [3] => Array(
            [A] => Stock 2
            [B] => Stock 2 Address
            [C] => Stock 2 Phone
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
          )

    // City Name 2 begins
    [4] => Array(
            [A] => City 2
            [B] => NULL
            [C] => NULL
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
        )
    [5] => Array(
            [A] => City 2 - Sell Department Phone
            [B] => NULL
            [C] => 123-123-124
            [D] => NULL
            [E] => NULL
            [F] => NULL
            [G] => NULL
          )
    // and so on...      
)

The structure above isn't handy for processing so I need to convert it to the following form:

Array(

  [0] => Array(
    [City 1] => Array(
      [sell] => City 1 - Sell Department Phone
      [stocks] => Array(
        [Stock 1] => Array(
          [address] => Stock 1 Address
          [phone] => Stock 1 Phone
        )

        [Stock 2] => Array(
          [address] => Stock 2 Address
          [phone] => Stock 2 Phone
        )
      )
    )
  )

  [1] => Array(
    [City 2] => Array(
      [sell] => City 2 - Sell Department Phone
      [stocks] => Array(
        [Stock 1] => Array(
          [address] => Stock 1 Address
          [phone] => Stock 1 Phone
        )
        [Stock 2] => Array(
          [address] => Stock 2 Address
          [phone] => Stock 2 Phone
        )
      )
    )
  )
)

My code so far:

$output = array();

foreach ($sheetData as $key => $data) {

  // Filter out empty array items
  $data = array_filter($data);

  if (count($data) == 1 && $data['A']) {
   // Get "City" name
   $output[$key]['city'] = $data['A'];
  }

  // Stuck here
}

Please help me with this matter

Upvotes: 0

Views: 111

Answers (1)

C. E.
C. E.

Reputation: 10607

You can try using array_chunk to get all indexes corresponding to a city in one array. Then, for that array, manually construct the new array.

$final_array = array();
$arr = array_chunk( $old_array, 4 );
foreach( $arr as $key => $city ) {
    $final_array[$key]['sell'] = $city[1]['A'];
    //and so on...
}

Upvotes: 1

Related Questions