Pour simplifier, j'ai un tableau:

 Array (
[0] => Array
    (
        [content] => Item One
        [type] => Breakfast
    )
[1] => Array
    (
        [content] => Item Two
        [type] => Breakfast
    )
[2] => Array
    (
        [content] => Item One
        [type] => Lunch
    )
[3] => Array
    (
        [content] => Item One
        [type] => Dinner
    )
 )

Quelle est la manière la plus efficace de créer un nouveau tableau multidimensionnel où il se combinerait sur la correspondance du «type» de clé? Comme ci-dessous. Essai actuel dans un foreach. Existe-t-il des fonctions intégrées pour cela?

 Array (
[0] => Array
    (
        [content] => Item One
        [type] => Breakfast
    ),
    (
        [content] => Item Two
        [type] => Breakfast
    )
[1] => Array
    (
        [content] => Item One
        [type] => Lunch
    ),
[2] => Array
    (
        [content] => Item One
        [type] => Dinner
    )
 )
-2
Cool Shape 17 janv. 2017 à 17:05

2 réponses

Meilleure réponse

Vous devez parcourir le tableau d'entrée et créer un nouveau tableau de sortie. Jetez un œil à cet exemple simple:

<?php
$input = [
    [
        'content' => 'Item One',
        'type' => 'Breakfast',
    ],
    [
        'content' => 'Item Two',
        'type' => 'Breakfast',
    ],
    [
        'content' => 'Item Three',
        'type' => 'Lunch',
    ],
    [
        'content' => 'Item Four',
        'type' => 'Dinner',
    ]
];
$output = [];

array_walk(
    $input,
    function($element) use (&$output) {
        $output[$element['type']][] = $element;
    }
);
print_r($output);

Le résultat ci-dessus est évidemment:

Array
(
    [Breakfast] => Array
        (
            [0] => Array
                (
                    [content] => Item One
                    [type] => Breakfast
                )

            [1] => Array
                (
                    [content] => Item Two
                    [type] => Breakfast
                )

        )

    [Lunch] => Array
        (
            [0] => Array
                (
                    [content] => Item Three
                    [type] => Lunch
                )

        )

    [Dinner] => Array
        (
            [0] => Array
                (
                    [content] => Item Four
                    [type] => Dinner
                )

        )

)

Bien sûr, vous pouvez placer l'élément et la structure de votre choix dans le tableau créé. Pour cet exemple, je viens d'accepter les éléments d'origine, car cela n'est pas pertinent pour démontrer comment parcourir facilement le tableau.

Si vous insistez sur une séquence de touches numériques dans le tableau de sortie, vous pouvez simplement utiliser print_r(array_values($output)); au lieu de print_r($output) ...

3
arkascha 17 janv. 2017 à 14:25

Vous pouvez le parcourir en boucle et les pousser dans un nouveau tableau par TYPE

Par exemple :

$newitmes = [];
 foreach($arr as $item){
    $type = $item['type'];
    $newitmes[$type][] = $item;
 }
print_r($newitmes);

J'espère que ça répond à ta question.

0
Zenel Shabani 17 janv. 2017 à 14:21