2012-06-06 2 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

없습니다. '$ arrTeam [$ i] [ "games"] [] = $ u'와'$ 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() 
    ) 
); 
,

을 수행합니다`sizeof` 문에 대한 필요가

$numTeams = 4; 
for($x=0;$x<$numTeams;$x++) { 
    $arrTeam[$x] = array("name"=>"","games"=>array()); 
} 
+0

아름다운! 내가 왜 다른 결과를 가져올 지 이해하지 못 하겠지만? – user1439737

+0

이것은 정의되지 않은 중첩 된 배열로 인해 통지를 없애기위한 수정입니다. 올바른 결과를 얻지 못하고 있습니까? –

+0

잘 작동하는 이유는 무엇인가 궁금합니다. 코드를 읽을 때 배열을 더 명확하게 정의하는 것 외에는 똑같은 것처럼 보입니다. – user1439737