I'm currently writing a simple Battleships game in PHP. At the start of the game, I generate three ship positions on a 5 x 5 board, with each ship occupying one square:
function generate_three_battleships($ships){
    for ($n=0; $n<3; $n++){
        // Generate new position, returned from function as string
        $ship_position = generate_new_position();
        // Check to ensure that the position is not already occupied - if so, recast 
        if (in_array($ship_position, $ships)){
            $ship_position = generate_new_position();
        }//if
        // Assign position to array
        array_push($ships, $ship_position);
    }//for
}//generate_three_battleships
Each position is represented as a two-digit string, which represent cartesian coordinates (so for example, "32" represents y = 3, x = 2). This task is handled by the generate_new_position function:
When the game starts, the user will enter in their guesses for rows and columns:
function generate_new_position(){
    // Generate x and y coordinates - cast to string for storage
    $ship_row = (string)random_pos();
    $ship_col = (string)random_pos();
    $ship_position = $ship_row.$ship_col;
    return $ship_position;
}//generate_new_position
The user then enters their guesses for rows and columns, and the game will check to see if there is a ship there:
// Generate battleships
generate_three_battleships($ships);
for($turn=1; $turn <= GUESSES; $turn++){
    // First check to see if all ships have been sunk. If not, proceed with the game
    if ($ships_sunk < 3){
        $guess_row = (string)readline("Guess a row: ");
        $guess_col = (string)readline("Guess a column: ");
        $guess = $guess_row.$guess_col; // format guesses as strings
        if(($guess_row=="") || ($guess_col=="") || ($guess_row < 0) || ($guess_col < 0) || ($guess_row >= BOARDSIZE) || ($guess_col >= BOARDSIZE)){
            print("Oops, that's not even in the ocean. \n");
        }
        else if(array_search($guess, $ships) != false){
            print("Congratulations! You sunk one of my battleships!\n");
            $board[$guess_row][$guess_col] = "X";
            $ships_sunk++;
        }
    }
However, the in_array function is consistently returning false for every guess, even if that guess is actually in the $ships array. I can't see where I am going wrong, as I have explicitly cast everything to string. Am I missing something obvious?
As some people have asked, the output of var_dump on $ships after generate_three_battleships has executed is as follows:
array(3) {
  [0]=>
  string(2) "12"
  [1]=>
  string(2) "30"
  [2]=>
  string(2) "03"
}
 
    