PHP でのオブジェクト比較に問題があります。簡単なコードのように見えますが、実際には私の好みには遅すぎます。私は言語にそれほど詳しくないので、次のコードに関するフィードバックと提案をお願いします。
class TestTokenGroup {
private $tokens;
...
public static function create($tokens) {
$instance = new static();
$instance->tokens = $tokens;
...
return $instance;
}
public function getTokens() {
return $this->tokens;
}
public static function compare($tokenGroup1, $tokenGroup2) {
$i = 0;
$minLength = min(array(count($tokenGroup1->getTokens()), count($tokenGroup2->getTokens())));
$equalLengths = (count($tokenGroup1->getTokens()) == count($tokenGroup2->getTokens()));
$comparison = strcmp($tokenGroup1->getTokens()[$i], $tokenGroup2->getTokens()[$i]);
while ($comparison == 0) {
$i++;
if (($i == $minLength) && ($equalLengths == true)) {
return 0;
}
$comparison = strcmp($tokenGroup1->getTokens()[$i], $tokenGroup2->getTokens()[$i]);
}
$result = $comparison;
if ($result < 0)
return -1;
elseif ($result > 0)
return 1;
else
return 0;
}
...
}
上記のコード$tokens
は単純な文字列の配列です。
上記の方法を使用して、約 40k オブジェクトusort()
で構成される配列に約 2 秒かかります。TestTokenGroup
それをスピードアップする賢明な方法はありますか?ここのボトルネックはどこですか?
編集:最初に含めるのを忘れていた getTokens() メソッドを追加しました。