2012-01-12 19 views

回答

3
$first = array_shift($array); 
// do something with $first 

foreach ($array as $key => $value) { 
    // do something with $key and $value 
} 
+2

我以爲這是一個答案,但決定反對它,因爲它會修改輸入數組。如果這並不重要,陣列可以安全地修改,這是最好的答案,你將擁有一個+1 :-) – DaveRandom 2012-01-12 10:24:24

3

我這樣做:

$firstDone = FALSE; 
foreach ($array as $value) { 
    if (!$firstDone) { 
    // Process first value here 
    $firstDone = TRUE; 
    } else { 
    // Process other values here 
    } 
} 

...但是這是否是最好的方式是值得商榷的。我會用任何其他方法使用foreach,因爲那麼密鑰的含義並不重要。

+0

擊敗我17秒。 +1 – davidethell 2012-01-12 10:24:09

2

這裏有一種方法:

$first = true; 
foreach($array as $key => $value) { 
    if ($first) { 
     // something different 
     $first = false; 
    } 
    else { 
     // regular logic 
    } 
} 
+0

有一個+1然後,我不懲罰打字慢;-) – DaveRandom 2012-01-12 10:25:16

1
$i = 0; 
    foreach($ur_array as $key => $val) { 
     if($i == 0) { 
     //first index 

     } 
     else { 
     //do something else 
     } 

     $i++; 
    } 
0

如果你確定數組包含我會做這樣的至少一個條目:

processFirst($myArray[0]); 

for ($i=1; $i<count($myArray); $1++) 
{ 
    processRest($myArray[$i]); 
} 

否則,你就需要在處理第一個元素之前對其進行測試

0

我已經爲您製作了一個功能!

function arrayCallback(&$array) { 
    $callbacks = func_get_args(); // get all arguments 
    array_shift($callbacks); // remove first element, we only want the callbacks 

    $callbackindex = 0; 

    foreach($array as $value) { 
     // call callback 
     $callbacks[$callbackindex]($value); 

     // make sure it keeps using last callback in case the array is bigger than the amount of callbacks 
     if(count($callbacks) > $callbackindex + 1) { 
      $callbackindex++; 
     } 
    } 
} 

如果你調用這個函數,它接受一個數組和無限的回調參數。當數組大於提供的函數的數量時,它保留在最後一個函數中。

您可以簡單地這樣稱呼它:

arrayCallback($array, function($value) { 
    print 'callback one: ' . $value; 
}, function($value) { 
    print 'callback two: ' . $value; 
}); 

編輯

如果你想避免使用這樣的函數,隨意挑選任何其他的正確答案。這正是你真正喜歡的。如果你反覆計劃用不同的回調函數循環一個或多個數組,我建議使用一個函數來重新使用代碼。 (我是一個優化怪胎)

相關問題