0

この配列を最後の内部インデックス(0、1、2)で配置し、最後の内部インデックスの値を各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] => 
                )

        )

)
4

3 に答える 3

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;
}
于 2012-07-27T07:38:29.043 に答える
1

for/foreachSiGantengが示唆したように、私はループ以外の方法を見ていません:

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

これにより、構築する必要のあるキーを定義できます。指定しない場合、関数はすべてのキーの配列を作成します。

于 2012-07-27T07:30:07.503 に答える
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

于 2012-07-27T07:27:34.977 に答える