2013-05-24 5 views

Antwort

16

können Sie beispielsweise verwenden array_slice()

$num = 5; //it will start from sixth element 

foreach(array_slice($temp_row, $num) as $key => $value) { 

    echo $key.'=>'.$value.'<br>'; 
} 
+0

danke @Robert .. es hilft! – iamnards

+0

Einfach und funktioniert :) Gern geschehen. – Robert

2

Sie überspringen könnten, wenn Zähler nicht sechstes Element sind ...

<?php 
$num=0; 
foreach($temp_row as $key => $value) { 
    if(++$num < 6) 
    { 
     continue; 
    } 
    echo $num; 
} 
?> 
+0

keine brillante Lösung ... was ist, wenn es Tausende und Abertausende von Elementen gibt, die übersprungen werden sollen? –

+0

yep - nicht am besten, wenn Sie viele weitere Gegenstände überspringen, aber kleine Sätze wird es nicht ein Schmerz sein. immer einen Kompromiss mit dieser Art von Sache. –

0
$i = 1; 
foreach ($temp_row as $key => $value) { 
    if (($num = $i++) < 6) continue; 
    // Do something 
} 

Oder

for ($i = 0; $i < 5; $i++) next($temp_row); 
while(list($key, $value) = each($temp_row)) { 
    // Do something 
} 
0

Ich schlage vor, dass Sie ein for-Look anstelle von a für jedes verwenden. Sie können dann auf den Schlüssel und den Wert zugreifen, die sich an der Position i in Ihrer Schleife befinden.

<?php 
$num = 1; 
$keys = array_keys($temp_row); 
for($i = 5; $i < count($temp_row); $i++) { 
      $key = $keys[$i]; 
      $val = $temp_row[$i]; 
    echo $i; 
} 
?> 
2

Oder mit einer for-Schleife

$num = 1; 
for($i=5; $i<= count($temp_row), $i++) { 
    echo $num; 
    $num++; 
} 
+2

wäre es besser, die Anzahl ($ temp_row) außerhalb der for-Schleife zu berechnen –

+0

kann es innen sein, 'für ($ i = 5, $ cnt = Anzahl ($ temp_row); $ i <= $ cnt, ++ $ i) ';) – Robert

1

diesen Code versuchen:

$new_temp_row = array_slice($temp_row, 5); 

foreach($new_temp_row as $key => $value) { 
    echo $value; 
} 
0

Sie können neue Array erstellen mit benötigt Datenteil des Ursprungsarrays an d Arbeit mit ihm:

$process = array_slice ($temp_row, 5); 
foreach($process as $key => $value) { 

    //TODO Your logic 
} 

Oder die skipp erste Siel elments:

<?php 
$num=1; 
foreach($temp_row as $key => $value) { 
    if ($num < 6) { 
     $num++; 
     continue; 
    } 
    //TODO Your logic 
} 
?> 
+1

nur ... löschen Sie einfach Ihren zweiten Vorschlag. Was wäre, wenn er 100000 Elemente überspringen müsste? –

6

nicht direkt mit einem foreach(). Der Hinweis ist im each Teil des Namens. Es durchläuft alle Elemente.

Also, wie können wir es erreichen?

Sie könnten immer eine if() Klausel innerhalb der Schleife haben, die den Schlüsselwert prüft, bevor Sie den Rest der Arbeit erledigen.

Aber wenn das für Sie aus irgendeinem Grund nicht funktioniert, würde ich vorschlagen, eine FilterIterator zu verwenden, um dies zu erreichen.

Die FilterIterator ist eine Standard-PHP-Klasse, die Sie erweitern können, um Ihre eigenen Filter zu erstellen. Der Iterator kann dann unter Verwendung einer Standardschleife foreach() geloopt werden, wobei nur die Datensätze aufgenommen werden, die vom Filter akzeptiert werden.

Es gibt einige Beispiele auf der Hilfeseite darüber verknüpft helfen, aber hier ist ein kurzes Beispiel ich zusammen für Sie geworfen haben:

class SkipTopFilter extends FilterIterator { 
    private $filterNum = 0; 
    public function __construct(array $array, $filter) { 
     parent::__construct(new ArrayIterator($array)); 
     $this->filterNum = $filter; 
    } 
    public function accept() { 
     return ($this->getInnerIterator()->key() >= $this->filterNum); 
    } 
} 

$myArray = array(13,6,8,3,22,88,12,656,78,188,99); 
foreach(new SkipTopFilter($myArray, 6) as $key=>$value) { 
    //loop through all records except top six. 
    print "rec: $key => $value<br />"; 
} 

getestet; Ausgänge:

rec: 6 => 12 
rec: 7 => 656 
rec: 8 => 78 
rec: 9 => 188 
rec: 10 => 99