2015-12-02 28 views
0

我有此數組:重新安排陣列(從關鍵值移動)和組織秩序

Array 
(
    [LLLLLLL:] => Array 
     (
      [ brand1:] => Array 
       (
        [people: (100%)] => Array 
         (
         ) 
        [countries: (90%)] => Array 
         (
         ) 
        [yyyy: (80%)] => Array 
         (
         ) 
        [languages: (70%)] => Array 
         (
         ) 
       ) 
      [ brand2:] => Array 
       (
        [people: (60%)] => Array 
         (
         ) 
        [countries: (50%)] => Array 
         (
         ) 
        [yyyy: (40%)] => Array 
         (
         ) 
        [languages: (30%)] => Array 
         (
         ) 
       ) 
     ) 
) 

我怎樣才能重新安排我的陣列,以有這樣的:

array(
     array(
      ('LLLLLLL') => 'people', 
      ('BRAND1') => '100%', 
      ('BRAND2') => '60%'), 
    array(
      ('LLLLLLL') => 'countries', 
      ('BRAND1') => '90%', 
      ('BRAND2') => '50%') 

    array(
      ('LLLLLLL') => 'yyyy', 
      ('BRAND1') => '80%', 
      ('BRAND2') => '50%') 
    array(
      ('LLLLLLL') => 'languages', 
     ('BRAND1') => '70%', 
     ('BRAND2') => '30%', 

我不知道,例如,如何將字符串上的':'後面的字符串移動到值上,然後按不同的順序重新排列。如何才能做到這一點?

+0

目前還不清楚'NETWORK','BRAND1'和其他名字來自哪裏...... – MrHug

+0

@MrHug,對不起,我有一個錯誤,已經編輯過 – 62009030

回答

0

我認爲這應該做到這一點。請注意,這不是測試:

$result = array(); 

foreach ($initialArray as $lll => $brands) { 
    $lll = rtrim($lll, ':'); 
    foreach ($brands as $brandName => $brandValues) { 
     $brandName = strtoupper(preg_replace('/[\s:]/', '', $brandName)); 
     $values = array_keys($brandValues); 
     foreach ($values as $value) { 
      preg_match('/([a-z]*): \(([0-9]*%)\)/', $value, $matches); 

      if (!isset($result[$matches[1]])) { 
       $result[$matches[1]] = array($lll => $matches[1]); 
      } 
      $result[$matches[1]][$brandName] = $matches[2]; 
     } 
    } 
} 
0

您可以使用正則表達式+ array_map它。

$datos = Array(
     'LLLLLLL:' => Array(
       'brand1:' => Array(
         'people: (100%)' => Array 
          (
          ), 
         'countries: (90%)' => Array 
          (
          ), 
         'yyyy: (80%)' => Array 
          (
          ), 
         'languages: (70%)' => Array 
          (
          ) 
        ), 
       'brand2:' => Array(
         'people: (60%)' => Array 
          (
          ), 
         'countries: (50%)' => Array 
          (
          ), 
         'yyyy: (40%)' => Array 
          (
          ), 
         'languages: (30%)' => Array 
          (
          ) 
        ) 
      ) 
    ); 

    $datos = array_map(function($row) { 
     $ret = array(); 
     foreach ($row as $key => $items) { 
      foreach ($items as $dato => $vacio) { 
       if (preg_match('/([^:]+): \(([^\)]+)\)/i', $dato, $coincidencias)) { 
        $pos = $coincidencias[1]; 

        if (!isset($ret[$pos])) 
         $ret[$pos] = array(); 

        $ret[$pos][$key] = $coincidencias[2]; 
       } 
      } 
     } 
     return $ret; 
    }, $datos); 

    echo '<pre>' . print_r($datos, true); 

沒有完成,但你可以這樣去。