2012-07-27 27 views
0

如何安排這個陣列由最後內索引(0,1,2),並獲得最後的內側索引的值作爲每個第二指標的值:排列PHP多維數組通過內側索引

Array 
(
    [text] => Array 
     (
      [grid] => Array 
       (
        [0] => 3 
        [1] => 4 
        [2] => 5 
       ) 

      [image] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

      [align] => Array 
       (
        [0] => left 
        [1] => right 
        [2] => left 
       ) 

      [title] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

      [content] => Array 
       (
        [0] => 
        [1] => 
        [2] => 
       ) 

     ) 

) 

並得到如下結果:

Array 
(
    [text] => Array 
     (
      [0] => Array 
       (
        [grid] => 3 
        [image] => 
        [align] => left 
        [title] => 
        [content] => 
       ) 

      [1] => Array 
       (
        [grid] => 4 
        [image] => 
        [align] => right 
        [title] => 
        [content] => 
       ) 

      [2] => Array 
       (
        [grid] => 5 
        [image] => 
        [align] => left 
        [title] => 
        [content] => 
       ) 

     ) 

) 
+3

你尋找一個班輪解決方案嗎?可以肯定的是,上面的使用'foreach'是微不足道的。 – 2012-07-27 07:21:08

+0

你的解決方案中的索引[0]在哪裏?你只掃描1和2. 這些問題可以很容易地通過創建一個新的結果數組和foreach($ someArr作爲$ key => $ value)來解決 – 2012-07-27 07:25:37

+0

@SiGanteng我在尋找更好的方式來安排每個第一個數組通過其子索引。上面的例子使用0,1和2索引。最後一個子索引從0開始到任意數字。 – zourbuth 2012-07-27 07:26:44

回答

2

這將做的工作

function restructure($arr){ 
    $newArr = array(); 
    foreach($arr as $k => $v){ 
     foreach($v as $k1 => $v1){ 
      foreach($v1 as $k2 => $v2){ 
       $newArr[$k][$k2][$k1] = $v2; 
      } 
     } 
    } 
    return $newArr; 
} 
0

這應該有效。

function formatit($arr) { 

    $new = array(); 

    foreach($arr as $k=>$v) { 
    foreach($v as $k1=>$v1) { 
    $new[$k1][$k] = $v1; 
    } 
    } 
    return $new; 
} 

經過測試。稱其爲

$arr['text'] = formatit($arr['text']); 

http://ideone.com/rPzuR

+2

那麼也許你應該先測試它..? – 2012-07-27 07:28:28

+0

剛剛測試..工作很好,朋友。爲我的樣品。 – FatalError 2012-07-27 07:31:09

+2

@FatalError:false。 http://ideone.com/hoJXu – 2012-07-27 07:34:05

1

由於SiGanteng建議,我沒有看到其他的方式比for/foreach循環:

function buildArray($source, $key = false) 
{ 
    // Build the new array 
    $new_array = array(); 
    // Define groups 
    $groups = $key === false ? array_keys($source) : array($key); 

    foreach($groups AS $group) 
    { 
     // Get the keys 
     $keys = array_keys($array[$group]); 
     // Count the values 
     $num_entries = count($array[$group][$keys[0]]); 

     for($i = 0; $i < $num_entries; $i++) 
     { 
      foreach($keys AS $key) 
      { 
       $new_array[$group][$i][$key] = $array[$group][$key][$i]; 
      } 
     } 
    } 
    return $new_array; 
} 

這允許您定義需要建立的關鍵;如果未指定,則函數爲每個鍵構建數組。

+0

你的輸出與OP請求的不一樣,請仔細閱讀輸出樣本 – 2012-07-27 07:36:57

+1

@SiGanteng你說得對,我沒有注意到第一個'text'索引,我的不好 – Strae 2012-07-27 07:38:41

+0

「text 「是第一階段的指數。如果有另一個第一階段數組索引,如「按鈕」,「視頻」等? – zourbuth 2012-07-27 07:47:27