2012-06-06 67 views
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(); 

应通知只是被禁用或有应付的更好的方法吗?

我试图填充它,但代码结束了两倍长,非常混乱。

+0

没有需要'sizeof'声明。你可以像下面这样向数组添加元素:'$ arrTeam [$ i] [“games”] [] = $ u' and'$ used [] = $ i;' –

+0

哦,哇,真酷!谢谢 – user1439737

回答

0

你正在检查这一个所有的地方:

$arrTeam[$i]["games"] 

没有测试它的存在。 更改为:

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

,或者您可以禁用通知:

error_reporting(E_ALL^E_NOTICE); 

编辑:

在ROUND_ROBIN做一次()函数:

代替:

$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()); 
} 
+0

美丽!虽然我不太明白为什么会给出不同的结果? – user1439737

+0

这是一个修复,只是为了摆脱通知,因为未定义的嵌套数组;你没有得到正确的结果吗? – 2012-06-06 14:22:47

+0

它工作得很好我只是想知道为什么它可以工作,当我阅读代码时,它看起来像是做同样的事情,除了可能更明确地定义数组。 – user1439737