2012-07-27 29 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