feature/avoid-repeating-places-in-game #38
@ -328,14 +328,13 @@ class Select
|
||||
|
||||
private function generateJoins(): array
|
||||
{
|
||||
$joins = $this->joins;
|
||||
|
||||
$joinQueries = [];
|
||||
$params = [];
|
||||
|
||||
foreach($joins as $value) {
|
||||
list($joinQueryFragment, $paramsFragment) = $this->generateTable($value[1], true);
|
||||
array_push($joinQueries, $value[0] . ' JOIN ' . $joinQueryFragment . ' ON ' . $this->generateColumn($value[2]) . ' ' . $value[3] . ' ' . $this->generateColumn($value[4]));
|
||||
foreach($this->joins as $join) {
|
||||
list($joinQueryFragment, $paramsFragment) = $this->generateTable($join[1], true);
|
||||
|
||||
$joinQueries[] = $join[0] . ' JOIN ' . $joinQueryFragment . ' ON ' . $this->generateColumn($join[2]) . ' ' . $join[3] . ' ' . $this->generateColumn($join[4]);
|
||||
$params = array_merge($params, $paramsFragment);
|
||||
bence
commented
Better to use
Better to use `$array[] =` to add a new element to an array because it is more efficient according the the [PHP docs](https://www.php.net/manual/en/function.array-push.php):
```php
$joinQueries[] = $value[0] . ' JOIN ' . $joinQueryFragment . ' ON ' . $this->generateColumn($value[2]) . ' ' . $value[3] . ' ' . $this->generateColumn($value[4]));
```
|
||||
}
|
||||
|
||||
|
@ -35,21 +35,26 @@ class PlaceRepository
|
||||
return $this->getRandomNForMapWithValidPano($mapId, $n);
|
||||
} else { // authorized user or multiplayer game with selection based on what the host played before
|
||||
$unvisitedPlaces = $this->getRandomUnvisitedNForMapWithValidPano($mapId, $n, $userId);
|
||||
if (count($unvisitedPlaces) == $n) {
|
||||
bence
commented
I would check if
I would check if `count($unvisitedPlaces) == $n` before calling this function so we could save a function call and a DB query in a lot of cases.
```php
if (count($unvisitedPlaces) == $n) {
return $unvisitedPlaces;
}
```
|
||||
return $unvisitedPlaces;
|
||||
}
|
||||
|
||||
$oldPlaces = $this->getRandomOldNForMapWithValidPano($mapId, $n - count($unvisitedPlaces), $userId);
|
||||
|
||||
return array_merge($unvisitedPlaces, $oldPlaces);
|
||||
bence
commented
This can be This can be `private` now. And I don't remember why it has a parameter `$exclude` but I would remove that for a better understaning and create a local variable instead.
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: use Map instead of id
|
||||
public function getRandomNForMapWithValidPano(int $mapId, int $n, array $exclude = []): array
|
||||
private function getRandomNForMapWithValidPano(int $mapId, int $n): array
|
||||
bence
commented
This can be removed too. This can be removed too.
|
||||
{
|
||||
$places = [];
|
||||
|
||||
$select = new Select(\Container::$dbConnection, 'places');
|
||||
$select->where('id', 'NOT IN', $exclude);
|
||||
$select->where('map_id', '=', $mapId);
|
||||
$numberOfPlaces = $select->count();
|
||||
|
||||
$exclude = [];
|
||||
for ($i = 1; $i <= $n; ++$i) {
|
||||
$place = $this->getRandomForMapWithValidPano($numberOfPlaces, $select, $exclude);
|
||||
|
||||
@ -60,7 +65,7 @@ class PlaceRepository
|
||||
return $places;
|
||||
}
|
||||
|
||||
private function getRandomForMapWithValidPano($numberOfPlaces, $select, array &$exclude, ?callable $pickRandomInt = null): ?Place
|
||||
private function getRandomForMapWithValidPano(int $numberOfPlaces, Select $select, array &$exclude, ?callable $pickRandomInt = null): ?Place
|
||||
{
|
||||
do {
|
||||
$numberOfPlacesLeft = $numberOfPlaces - count($exclude);
|
||||
@ -79,7 +84,7 @@ class PlaceRepository
|
||||
return $place;
|
||||
}
|
||||
|
||||
private function selectRandomFromDbForMap($numberOfPlacesLeft, $select, array $exclude, ?callable $pickRandomInt): ?Place
|
||||
private function selectRandomFromDbForMap(int $numberOfPlacesLeft, Select $select, array $exclude, ?callable $pickRandomInt): ?Place
|
||||
{
|
||||
if ($numberOfPlacesLeft <= 0)
|
||||
return null;
|
||||
|
Loading…
Reference in New Issue
Block a user
If it is refactored anyway I would directly use
$this->joins
and local variable$joins
(line 331) becomes unnecessary.And calling the loop variable
$join
instead of$value
would be nicer.