2017-01-17 5 views
-2

Der Einfachheit halber habe ich ein Array:Iterieren Array und die Schaffung von mehrdimensionalen

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

Was ist der effizienteste Weg, um eine neue mehrdimensionale Array zu erstellen, wo sie auf passenden Schlüssel „type“ kombinieren würde? Wie unten. Aktuelle versuchen in einer foreach. Sind dafür Funktionen eingebaut?

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 
    ) 
) 
+1

Können Sie teilen, was Sie versucht haben? –

+0

Nun mache ich es mit einer foreach-Schleife und Überprüfung Typ, wie ich über iterieren und wenn der Typ hat sich etwas tun, aber es ist wirklich hässlich geworden. –

+0

Ohne uns zu zeigen, was Sie von der Ausgabe erwarten, und ohne uns zu zeigen, was Sie versucht haben, erhalten Sie wahrscheinlich keine Antwort, wenn jemand nur den Code für Sie erstellt. –

Antwort

3

Sie müssen durch das Eingabearray iterieren und ein neues Ausgabearray erstellen. Schauen Sie sich auf diesem einfachen Beispiel:

<?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); 

Der Ausgang von oben offensichtlich ist:

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 
       ) 

     ) 

) 

Natürlich können Sie platzieren, was Element und Struktur, die Sie innerhalb der erstellten Array möchten. Für dieses Beispiel habe ich einfach die ursprünglichen Elemente akzeptiert, da dies für das Demonstrieren der einfachen Iteration durch das Array irrelevant ist.

Wenn Sie auf einem numerischen Tastenfolge in der Ausgabe-Array bestehen, dann nutzen Sie einfach print_r(array_values($output)); statt print_r($output) ...

+1

Interessant ... array_walk ... noch nie zuvor gesehen. nimmt ein Array, Callback und Userdata. Das ist cool! –

+0

@CoolShape Yep, macht es einfacher, meinen Code aus meiner Sicht zu folgen ... – arkascha

0

Sie können durch sie Schleife und schieben Sie sie in einem neuen Array von TYPE

zB:

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

Hope this beantwortet Ihre Frage.

+1

Es scheint, dass Sie Ihren eigenen Code nicht getestet haben ... '$ iem'! =' $ Item' und die Rechtschreibung in '$ newitmes' ist, naja ... "kreativ" ;-) – arkascha

+0

Danke fürs merken. –

Verwandte Themen