4b3c8b874641c3398f7aae0be9873163

The below function is used to return the value of the next seat that has a player in it (player_id > 0).

function get_next_seat($table_id, $start_seat) {
		$player_data = $this->admin->get_player_data($table_id);
		
		$seats = array();
		foreach($player_data["seats"] AS $seat_id => $array) {
			if ($player_data["seats"][$seat_id]["player_id"] != 0) {
				$seats[] = $seat_id;
			}
		}
		
		$seats = ksort($seats);
		
		$first_seat_id = reset($seats);
		$last_seat_id = end($seats);
		
		if ($start_seat == $last_seat_id) {
			return $first_seat_id;
		} else {
			$get_seat = $start_seat + 1;
			while(1 == 1) {
				if (in_array($get_seat, $seats)) {
					return $get_seat;
					break;
				} else {
					$get_seat = $get_seat + 1;
				}
			}
		}
	}

Refactorings

No refactoring yet !

5a00a3a98dcf6f9cd717440fd2b606e5

Eineki

October 22, 2008, October 22, 2008 12:48, permalink

1 rating. Login to rate!

This should do the trick in a more compact way.
No need of an array to memorize the occupied seats, as you choose the right one as you test for the occupation, and no need to search two times in two array too.
I think the code is self explanatory.

<?php
function get_next_seat($table_id, $start_seat) {
  $player_data=$this->admin->get_player_data($table_id);

  $first_seat = $start_seat;
  $next_seat  = $start_seat;

  foreach ($player_data["seats"] as $seat_id => $data) {
    if ($data["player_id"] !=0) {
      if ($seat_id < $first_seat) $first_seat = $seat_id;
      if (($seat_id > $start_seat) and ($seat_id < $next_seat)) $next_seat = $seat_id;
    }
  }

  return $start_seat < $next_seat? $next_seat : $first_seat;
}
?>
4b3c8b874641c3398f7aae0be9873163

extjspoker

November 3, 2008, November 03, 2008 22:53, permalink

No rating. Login to rate!

This didn't work...

When the player data array contained the following, the function returned 1 when the start seat = 1...it should return 2...

<?php
$player_data = array();
$player_data["seats"] = array();
$player_data[]["seats"][1] = array("name" => "test2", "player_id" => 2, "total_bet" => 0, "status" => "WAITING", "bankroll" => 1500);
$player_data[]["seats"][2] = array("name" => "test1", "player_id" => 1, "total_bet" => 0, "status" => "WAITING", "bankroll" => 1500);
?>
4b3c8b874641c3398f7aae0be9873163

extjspoker

November 3, 2008, November 03, 2008 23:25, permalink

No rating. Login to rate!

Here is what I was able to come up with:

<?php
function get_next_seat($start_seat) {
	$player_data = array();
	$player_data["seats"] = array();
	$player_data["seats"][1] = array("name" => "test1", "player_id" => 2, "total_bet" => 1300, "status" => "WAITING", "bankroll" => 0);
	$player_data["seats"][2] = array("name" => "test2", "player_id" => 1, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][3] = array("name" => "test3", "player_id" => 3, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][4] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][5] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][6] = array("name" => "test4", "player_id" => 4, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][7] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][8] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][9] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	$player_data["seats"][10] = array("name" => "empty", "player_id" => 0, "total_bet" => 1400, "status" => "WAITING", "bankroll" => 100);
	
	$start_seat = $start_seat + 1;
	
	for($i = $start_seat; $i <= 10; $i++) {
		if ($player_data["seats"][$i]["player_id"] > 0) {
			return $i;
		}
	}
	
	for($i = 1; $i <= 10; $i++) {
		if ($player_data["seats"][$i]["player_id"] > 0) {
			return $i;
		}
	}
	
}

echo get_next_seat(3);
?>
5a00a3a98dcf6f9cd717440fd2b606e5

Eineki

November 8, 2008, November 08, 2008 20:34, permalink

No rating. Login to rate!

You are right, $next_seat had a wrong starting value. This version should work.

<?php
function get_next_seat($table_id, $start_seat) {
  $player_data=$this->admin->get_player_data($table_id);

  $first_seat = $start_seat;
  $next_seat  = intval(sprintf("%u",-1));

  foreach ($player_data["seats"] as $seat_id => $data) {
    if ($data["player_id"] !=0) {
      if ($seat_id < $first_seat) $first_seat = $seat_id;
      if (($seat_id > $start_seat) and ($seat_id < $next_seat)) $next_seat = $seat_id;
    }
  }

  return $start_seat < $next_seat? $next_seat : $first_seat;
}
?>
5a00a3a98dcf6f9cd717440fd2b606e5

Eineki

November 11, 2008, November 11, 2008 00:26, permalink

No rating. Login to rate!

You are right, $next_seat had a wrong starting value. This version should work.

<?php
function get_next_seat($table_id, $start_seat) {
  $player_data=$this->admin->get_player_data($table_id);

  $maxint = intval(sprintf("%u",-1));
  $first_seat = $start_seat;
  $next_seat  = $maxint;

  foreach ($player_data["seats"] as $seat_id => $data) {
    if ($data["player_id"] !=0) {
      if ($seat_id < $first_seat) $first_seat = $seat_id;
      if (($seat_id > $start_seat) and ($seat_id < $next_seat)) $next_seat = $seat_id;
    }
  }

  return $next_seat < $maxint? $next_seat : $first_seat;
}
?>

Your refactoring





Format Copy from initial code

or Cancel