0

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() メソッドを追加しました。

4

1 に答える 1