按内部索引排列PHP多维数组



如何按最后一个内部索引(0,1,2)排列此数组,并将最后一个内索引的值作为每秒索引的值:

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

这将完成的工作

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

正如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;
}

这允许您定义需要构建的密钥;如果未指定,函数将为每个键生成数组。

这应该可以工作。

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

最新更新