配列を指定された回数回転させてから最初のインデックスを返すことができる関数を作成しようとしています。しかし、私が持っているのは本当に遅くて不格好です。見てみましょう:
<?php
/**
* Get the current userid
* @return integer
*/
public function getCurrentUser( DateTime $startDate, DateInterval $interval, DateTime $endDate, $currentUser, $users, $rotating )
{
if ($rotating == 0)
{
return $currentUser;
}
$usrArray = array();
$dateRange = new DatePeriod( $startDate, $interval, $endDate);
// Push userIds to an array
foreach ($users as $user)
{
$usrArray[] = $user->id;
}
// Get the number of iterations from startDate to endDate
$steps = iterator_count($dateRange);
// Find the initial position of the orignal user
$key = array_search($currentUser, $usrArray);
// Set up the array so index 0 == currentUser
$usr = $usrArray;
array_splice($usr, $key);
$slice = array_slice($usrArray, $key);
$startList = array_merge($slice, $usr);
// Start rotating the array
for ($i=0; $i < $steps; $i++)
{
array_push($startList, array_shift($startList));
}
return $startList[0];
}
PHP スクリプトがタイムアウトする前の Xdebug プロファイルを次に示します。 xdebug プロファイル
x 回の回転後にインデックス 0 を特定するより良い方法はありますか?