2016-04-28 7 views
0

Ich möchte foreach-Eingabesequenz weise zum Beispiel hinzufügen meine Array annehmen, wie dieseWie in diff div Eintrag foreach

<?php $arr = array('111','222','333','444','555','666','777','888','999'..so on)?> 

Jetzt foreach möchte ich Array wie folgt

<div> 
    <p>111</p> 
    <p>555</p> 
    <p>999</p> 
</div> 
<div> 
    <p>222</p> 
    <p>666</p> 

</div> 
<div> 
    <p>333</p> 
    <p>777</p> 
</div> 
<div> 
    <p>444</p> 
    <p>888</p> 
</div> 
eingeben

ist es möglich? Ich bin so verwirrt wie das geht?

+4

, die hier Ihre Sequenz ist? – RJParikh

+2

1., 5., 9. usw. in die erste Reihe, 2., 6., 10. usw. in die zweite Reihe. – tilz0R

+0

erstes Element ist in erster div, zweiter ist in zweiter div, dritter ist in dritter div, vierter ist in vierter div, fünft in erster div wieder, sechster in zweiter so entschuldigung für englisch – Newbie

Antwort

1

Hier ist die Ausführung, wie es geht.

Zuerst erstellen Split-Array, die notwendigen Elemente in 4 Gruppen gruppiert. Dann wird im zweiten foreach jeder formatiert. Dies ist ein Beispiel, das in großen Datenfeldern möglicherweise nicht sehr effektiv ist.

$arr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']; 

    $split = []; 
    foreach ($arr as $k => $v) { 
     $split[$k % 4][] = $v; 
    } 

    $out = ''; 
    foreach ($split as $row) { 
     $out .= '<div>'; 
     foreach ($row as $e) { 
      $out .= '<p>' . $e . '</p>'; 
     } 
     $out .= '</div>'; 
    } 
0

Eine weitere Möglichkeit, es tun könnte, ähnlich wie tilz0R

<?php $rowArray = array(); 
$counter = 1; 
foreach ($arr as $item){ 
$rowArray[$counter][] = $item; 
    if ($counter == 3){$counter = 1;}else{$counter++;} 
} 
foreach ($rowArray as $row) 
    { 
    ?><div> 
    <?php foreach ($row as $item) 
    { 
    ?><p><?= $item?></p> 
    <?php }?></div><?php 
    };?> 
0

Sie array_walk verwenden können:

const NB_ROWS = 4; 
for ($row = 0; $row < NB_ROWS; $row++) { 
    echo "<div>\n"; 
    array_walk($arr, function($item, $key, $row) { if($key % NB_ROWS == $row) echo "<p>$item</p>\n"; }, $row); 
    echo "</div>\n"; 
} 

Oder klarer sein:

eine Funktion definieren, die nur Elemente der gegebenen Zeile gedruckt wird: es

function printRow($item, $key, $row) 
{ 
    if($key % 4 == $row) { 
     echo "<p>$item</p>\n"; 
    } 
} 

Dann rufen Sie einmal für jede Zeile:

for ($row = 0; $row < 4; $row++) { 
    echo "<div>\n"; 
    array_walk($arr, 'printRow', $row); 
    echo "</div>\n"; 
}