0

タイトルが正しくないかもしれませんが、少し疲れています。

誰かが何かを理解するのを手伝ってくれるかどうか疑問に思っていました.これを含む文字列があります(または同様の、つまり同じパターンに従います)。

文章:

プレーヤー 1 ($630) プレーヤー 2 ($578) CLICKK ($507) プレーヤー 5 ($600) プレーヤー 6 ($621)

プレイヤー 1 の投稿 (SB) $3 プレイヤー 2 の投稿 (BB) $6

スタックサイズを宣言する最初のテキストから収集できる唯一の情報は、どのプレーヤーがどのスタック サイズを持っているかということです。

下の情報は、プレイヤー 1 が SB (スモール ブラインド)、プレイヤー 2 が BB (ビッグ ブラインド) であることを示しています。この情報から、CLICKK は UTG、プレイヤー 4 (このシナリオには存在しません) は MP であると推測できます。プレイヤー 5 は CO、プレイヤー 6 は BTN です。

UTG は BB の後、MP は UTG の後、CO は MP の後というように、常に傾向に従います。

私がやりたいことは、プレーヤー名、つまりプレーヤー 1、プレーヤー 2 などを対応する位置に置き換えて、プレーヤー 1 ($630) を SB ($630) などにすることです。

最後に、冗長になるので、下部を削除できます。

私のためにこれをするように頼んでいるわけではありませんが、正しい方向に私を向けたり、取るべき論理的な手順を教えていただければ、とても感謝しています。

4

1 に答える 1

1

おそらく、ハンドの開始時にすべてのプレーヤーを特定する必要があります。おそらく正規表現が文字列検索の最良の方法ですが、PHP Explode で試してみます。

 <?php

    /** 
     *  Input Strings
    **/
    $GameString = "Player 1 ($630) Player 2 ($578) CLICKK 
                   ($507) Player 5 ($600) Player 6 ($621)";

    $PostBlindString = "Player 1 posts (SB) $3 Player 2 posts (BB) $6";

    $data = explode( ")", $GameString );
    $players = array();

    /** 
     *  Get the Small Blind Player Name
    **/
    $SmallBlindPlayer = trim( 
                          substr( $PostBlindString, 0, 
                              strrpos( $PostBlindString, " posts (SB)" 
                                )
                            )
                        );

    echo $SmallBlindPlayer;
    // (Echos 'Player 1' )


    /** 
     *  Go through each exploded string
     *  find it's name before the bracket
    **/
    foreach ( $data as $p ) {
        if ( $p !== '' )
            $players[] = trim(substr( $p, 0, strrpos( $p, "(" )));
    }

    /** 
     * Our Resulting players
    **/
    print_r( $players );

    Array
    (
        [0] => Player 1
        [1] => Player 2
        [2] => CLICKK
        [3] => Player 5
        [4] => Player 6
    )

    /** 
     *  Game states array
     *  when we know someone's 
     *  position, we can assign it
     *  through some loop
    **/
    $gameStates = array ( 
                    "SB",
                    "BB",
                    "UTG",
                    "MP",
                    "CO",
                    "BTN"
                );

    /**
     *  Find the small button player
    **/
    for ( $x = 0; $x < count($players); $x++ ) {
        if ( $players[$x] == $SmallBlindPlayer )
            echo $players[$x] . " This player is the small blind!";
    }

    /**
     *  Go through them, as assign it
     *  loop back to start if the player
     *  is late in the array
    **/
    $PlayerPositions = array(); 
    $LoopedThrough = false;
    $Found = false; 
    $FoundAt = 0;
    $c = 0;

    for ( $x = 0; $x < count($players); $x++ ) {

        if ( $players[$x] == $SmallBlindPlayer && !$Found ) {
            $PlayerPositions[$players[$x]] = $gameStates[$c];
            $Found = true; 
            $FoundAt = $x;

        } else { 

            if ( $Found ) {
                if ( $x != $FoundAt )
                    $PlayerPositions[$players[$x]] = $gameStates[$c++];
            }

            if ( $Found && !$LoopedThrough ) {
                    $x = -1; $LoopedThrough = true;
            }
        }
    }


    /**
     *  Print the "merged" arrays
    **/
    print_r( $PlayerPositions );

    Array
    (
        [Player 1] => SB
        [Player 2] => BB
        [CLICKK] => UTG
        [Player 5] => MP
        [Player 6] => CO
    )

 ?>

私の考えでは、ここから、$Gamestatesプレイヤーが「見つかった」場所で状態を示し、新しい文字列に追加するか、元の文字列をsubstr_replace$Gamestringのようなものに置き換えることができることを知って、プレイヤーリストを反復処理できます。

さらに、プレーヤー名を収集するときに同じ時点でスタックサイズを収集して、単純に新しいものを作成する$GameStringこともできます-関係なく、配列にそれらがあるので、それらでできることはもっとたくさんあります.

于 2013-03-10T02:53:33.447 に答える