0rangeFish Posted December 10, 2014 Share Posted December 10, 2014 I'm getting an error: Undefined offset: 1 in… I'm trying to display a 2D array after filling it. It displays fine if I echo it while it's being made, but after it is not working. I'm making a pyramid solitaire game and am trying to set up the pyramid of cards. There are 7 arrays, each with a set amount of cards in them. The first array only gets one cards while the last array gets seven. This makes it like a pyramid. All the indexes that don't get a card are set to 0. So it looks like this where the 1's are cards: 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 The display2Darray function is what is causing the error. Specifically this line: if($array[$i][$j] == 0) Heres my main code: <?php include_once "pyramidCard.php"; include_once "pyramidDeck.php"; $theDeck = new Deck(); $pyramid = array(array(), array(), array(), array(), array(), array(), array()); $size = 7; $theDeck->shuffleCards(); makePyramid($pyramid, $size, $theDeck); display2Darray($pyramid, $size); //************************ // FRUNCTIONS * //************************ function makePyramid($array, $size, $deck) { $row = 0; for($i = 0; $i < $size; $i++) { for($j = 0; $j < $size; $j++) { if($j > $row) { $array[$i][$j] = 0; //echo ". <br>"; } else { $array[$i][$j] = $deck->dealCards(); //echo "this card is ".$array[$i][$j]->getFace()." of ".$array[$i][$j]->getSuit()."<br>"; } } $row++; } } function display2Darray($array, $size) { for($i = 0; $i < $size; $i++) { for($j = 0; $j < $size; $j++) { if($array[$i][$j] == 0) echo " "; else echo $array[$i][$j]->getFace()." of ".$array[$i][$j]->getSuit(); } echo "<br>"; } } ?> Quote Link to comment Share on other sites More sharing options...
CroNiX Posted December 10, 2014 Share Posted December 10, 2014 Hard to tell exactly without seeing an example of your array. Quote Link to comment Share on other sites More sharing options...
Solution Ch0cu3r Posted December 10, 2014 Solution Share Posted December 10, 2014 (edited) Im guessing the makePyramid() function is supposed to add the deck of cards to the $pyramid array? And display2Darray() function outputs the pyramid? Passing the variable to a function only sends its value to the function. It wont change the contents of the variable. Your display2Darray() function will be trying to get contents from an empty array. This is will be the cause of the undefined offset In order for you code to work as intended you can either pass $pyramid by reference function makePyramid(&$array, $size, $deck) Or the alternative is for the makePyramid() function to return the new array structure ($array) once it has dealt the cards. function makePyramid($array, $size, $deck) { ... return $array; } $pyramid = makePyramid($pyramid, $size, $deck); Please read the functioins documentation here - http://php.net/manual/en/language.functions.php Edited December 10, 2014 by Ch0cu3r Quote Link to comment Share on other sites More sharing options...
0rangeFish Posted December 10, 2014 Author Share Posted December 10, 2014 (edited) Ah yes, that was it. I just assumed it was pass by reference because in other languages I code in arrays are by default. Thanks! Edited December 10, 2014 by 0rangeFish Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.