0

この配列を扱う場合、何か追加されるまで、配列が参照されるたびに通知が表示されます。関係なく、すべての出力が期待どおりに機能します。

通知のスクリーンショット: http://imgur.com/75RGA

function create_round(&$arrTeam)
{
    $numTeams = 4;

    $used = array();

    for ($i = 0; $i < $numTeams; $i++) {
        if (!in_array($i, $used)) { //if i isnt already scheduled to play
            for ($u = $numTeams-1; $u > $i; $u--) {
                if (!in_array($u, $used) && !in_array($u, $arrTeam[$i]["games"])) { //if u isnt already scheduled to play and u hasnt been played by i before
                    $arrTeam[$i]["games"][sizeof($arrTeam[$i]["games"])] = $u;
                    $arrTeam[$u]["games"][sizeof($arrTeam[$u]["games"])] = $i;

                    $used[sizeof($used)] = $i;
                    $used[sizeof($used)] = $u;

                    echo($arrTeam[$i]["name"] . " VS " . $arrTeam[$u]["name"] . "<br>");
                    break;
                }
            }   
        }
    }

    var_dump($arrTeam);
}

function round_robin()
{
    $numTeams = 4;

    //Create array
    $arrTeam = array(
        $team = array(
            "name" => "",
            "games" => array()
        )
    );

    //TEMP ASSIGNING NAMES
    for ($i = 1; $i < $numTeams+1; $i++)
        $arrTeam[$i-1]["name"] = "Team $i"; 

    //Echo Round numbers
    for ($i = 1; $i < $numTeams; $i++) {
        echo("<br>Round $i<br>");
        create_round($arrTeam);
    }
}

round_robin();

通知を無効にする必要がありますか、それともこれに対処するより良い方法はありますか?

パディングを試みましたが、コードは2倍長くなり、非常に面倒になりました。

4

1 に答える 1

0

あなたはこれをいたるところでチェックしています:

$arrTeam[$i]["games"]

その存在をテストせずに。への変更:

if (isset($arrTeam[$i]["games"]) && ..more checking.. ) { ..do stuff.. }

または、通知を無効にすることができます:

error_reporting(E_ALL ^ E_NOTICE);

編集:

これを round_robin() 関数で 1 回実行します。

それ以外の:

$numTeams = 4;

//Create array
$arrTeam = array(
    $team = array(
        "name" => "",
        "games" => array()
    )
);

行う:

$numTeams = 4;
for($x=0;$x<$numTeams;$x++) {
   $arrTeam[$x] = array("name"=>"","games"=>array());
}
于 2012-06-06T12:48:59.013 に答える