将平面数组转换为多维数组

时间:2012-09-02 12:43:50

标签: php loops

使用PHPExel解析XLS文件。它执行以下数组结构:

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

上面的结构对于处理并不方便,所以我需要将其转换为以下形式:

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

到目前为止我的代码:

$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
}

请帮我解决这个问题

1 个答案:

答案 0 :(得分:1)

您可以尝试使用array_chunk在一个数组中获取与城市对应的所有索引。然后,对于该数组,手动构造新数组。

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