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 !
Eineki
October 22, 2008, October 22, 2008 12:48, permalink
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;
}
?>
extjspoker
November 3, 2008, November 03, 2008 22:53, permalink
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);
?>
extjspoker
November 3, 2008, November 03, 2008 23:25, permalink
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);
?>
Eineki
November 8, 2008, November 08, 2008 20:34, permalink
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;
}
?>
Eineki
November 11, 2008, November 11, 2008 00:26, permalink
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;
}
?>
The below function is used to return the value of the next seat that has a player in it (player_id > 0).