1

多次元配列があります:

Array
(
[type] => Array
(
    [0] => text
    [1] => portfolio
    [2] => slide
    [3] => text
)

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

[title] => Array
(
    [0] => title1
    [3] => title2
)

[content] => Array
(
    [0] => content1
    [3] => content2
)

[item] => Array
(
    [1] => 6
    [2] => 7
)

[pagination] => Array
(
    [1] => 8
)

[order] => Array
(
    [1] => desc
    [2] => asc
)

)

そして、配列で指定された[type]キーでグループ化します。

Array (

[0] => Array (
        [type] => text
        [grid] => 3
        [title] => title1
        [content] => content1
    )

[1] => Array (
        [type] => portfolio
        [grid] => 5
        [item] => 6
        [pagination] => 1
        [order] => desc
    )

[2] => Array (
        [type] => slide
        [grid] => 3
        [item] => 7
        [order] => asc
    )

[3] => Array (
        [type] => text
        [grid] => 4
        [title] => title2
        [content] => content2
    )

そのような配列のグループ化を行う方法またはPHP関数はありますか?

4

3 に答える 3

6

このスニペットはそれを実現します:

$result = array();
foreach ($array as $key => $data) {
    foreach ($data as $offset => $value) {
        if (isset($result[$offset])) {
            $result[$offset][$key] = $value;
        } else {
            $result[$offset] = array($key => $value);
        }
    }
}

ワーキングデモ

于 2012-07-12T08:53:24.930 に答える
2

array_map()コールバックにnullを指定すると、必要な処理が正確に実行されます。ただし、名前の代わりにインデックスの番号が付けられます。

独自のコールバックを作成する場合は、必要な名前の配列を返すことができます。

どうやら人々は実際のコードを望んでいるので:

array_map(null, $type_array, $grid_array, $title_array, $content_array, $item_array);

それは本当にそれと同じくらい簡単です。他の答えのほとんどはとても大きくて不必要です。

注:これは、配列の数が固定されていることを前提としています。固定されていない場合、これは機能しません。その後、Florentの回答を使用します。

于 2012-07-12T08:48:23.557 に答える
0

あなたはこの関数でそれを行うことができます:

$type_array = array('text', 'portfolio', 'slide', 'text');
$grid_array = array(3, 5, 3, 4);
$title_array = array(0 => 'title1', 3 => 'title2');
$content_array = array(0 => 'content1', 3 => 'content2');
$item_array = array(1 => 6, 2 => 7);


function group_arrays($type_array, $grid_array, $title_array, $content_array, $item_array) {
    $temp_array = array();

    for($i = 0; $i < count($type_array); $i++) {
        $temp_array[$i] = array( 'type' => @$type_array[$i],
                                 'grid' => @$grid_array[$i],
                                 'title' => @$title_array[$i],
                                 'content' => @$content_array[$i],
                                 'item' => @$item_array[$i]);
    }

    return $temp_array;
}

print_r(group_arrays($type_array, $grid_array, $title_array, $content_array, $item_array));

お役に立てれば!

于 2012-07-12T08:51:58.737 に答える