Page 1 sur 1

"Couper" un tableau en plusieurs parties

Posté : 09 sept. 2008, 22:28
par Superskunk
Bonjour à tous,

je développe un monitoring de serveur de jeu et j'ai un tableau avec la liste des maps.
Par exemple, sur le premier, j'en ai 30.
Je voudrais en afficher maximum 12 dans le tableau, mettre un bouton "next" et un bouton (si besoin) précédent. Logiquement, lorsque l'on appuie sur "next" la suite du tableau s'affiche.

J'ai mis un compteur de maps, ça fonctionne, le tableau fonctionne, mais je n'ai aucune idée de ce que je dois faire pour le "couper".

Merci d'avance pour votre aide :)

Posté : 09 sept. 2008, 23:17
par sadeq
Il faut un p'tit peu d'algorithmique :

soit
T : un tableau de 30 cases
n : nombre max de cases affichables

idebut : indice de la première case à afficher où idebut >=0 et <taille(T)
ifin : indice de la dernière case à afficher où ifin = (idebut + n-1) et ifin >=0 et <taille(T)

Au démarrage du programme, pour n = 12 :

1° lot affiché :
  • idebut = 0 (valeur initiale)
    ifin = idebut + n-1 = 0 + 12-1 = 11.
    On affiche alors T(i) pour i allant de 0 à 11
Si commande = suivant :
lot affiché :
  • idebut = ifin (précédent)+1 = 12
    ifin = idebut + n-1 = 12 + 12-1 = 23.
    On affiche alors T(i) pour i allant de 12 à 23
Si commande = précédent :
lot affiché :
  • ifin = idebut (précédent)-1 = 11
    idebut = ifin - n-1 = 11 - 12-1 = 0.
    On affiche alors T(i) pour i allant de 0 à 11
etc ...

TU peux en tirer un algorithme pour chaque action : démarrage, suivant et précédent. Sans oublier les règles de validité des indices idebut et ifin.

Posté : 10 sept. 2008, 12:23
par Superskunk
Merci de ta réponse, mais je crains ne pas être à la hauteur.

Voici le tableau du troisième serveur :
https://91.121.146.195/~serveur/serveur ... gelist.php
En haut, on voit le nombre de maps.

Voici le code :
<?php
require "monitoring.php";
$key = 3;

if(!$client->InitWithIp($server[$key]['ip'],$server[$key]['port'])){
die('An error occurred - '.$client->getErrorCode().":".$client->getErrorMessage());
}

$client->query("Authenticate", $server[$key]['username'], $server[$key]['password']);
$response = $client->getResponse();
if(isset($response['faultCode']) && isset($response['faultString'])){
die("[".$response['faultCode']."]".$response['faultString']);
}
$client->query("GetStatus");
$response = $client->getResponse();
if(isset($response['faultCode']) && isset($response['faultString'])){
die("[".$response['faultCode']."]".$response['faultString']);
}

if (!$client->query('GetChallengeList', 200, 0));
else {
	$ChallengeList = $client->getResponse();
	
	if (!$client->query('GetCurrentChallengeIndex')) trigger_error("[".$client->getErrorCode()."] ".$client->getErrorMessage());
	else $CurrentChallengeIndex = $client->getResponse() + 1;

		$result = count ($ChallengeList);
		echo $result;	
	
	foreach ($ChallengeList as $challenge) {
		$FileName = $cp->toHTML($challenge['Name']);

		echo '
<div style="border: 1px solid black;border-collapse:collapse;width:350px">		
<tr>
	<td>'.$FileName.'</td><br>
</tr>
</div>
';
	}	
}
?>
Donc pour le moment, il affiche toutes les maps.

Comme dit plus haut, je voudrais que ça n'affiche que 12maps par page.
Évidemment, je voudrais qu'il y ait des boutons "Suivant" et "Précédent".
Le mieux étant aussi d'avoir des boutons "1","2","3",... parce qu'avec 102 maps affichées sur des pages de 12, on arrive à 9 pages... Un peu difficile de s'y retrouver après.

Pour le moment, j'ai commencé à regarder un autre code pour apprendre, mais je suis un peu perdu.

<?php

$count= "12";

if(!$pos) $pos=0;
$SQL_Statement="SELECT * FROM players ORDER BY timeplayed DESC LIMIT $pos,$count";
$result=mysql_query($SQL_Statement);
$no_data=mysql_num_rows(mysql_query("SELECT * FROM players"));
$new_pos_next=$pos+$count;
	if($new_pos_next>=$no_data){
		$link_next="";
		} else {
		$link_next="<a href=\"?lang=".$lang."&page=".$page."&pos=" . $new_pos_next . "\" class=\"celltext\"><img src=\"img/next.gif\" border=\"0\"></a>";
	}
	$new_pos_prev=$pos - $count;
	if($new_pos_prev<0){
		$link_prev="";
		} else {
		$link_prev="<a "&pos=" . $new_pos_prev . "\" class=\"celltext\"><img src=\"img/prev.gif\" border=\"0\"></a>";
	}
while($data=mysql_fetch_array($result)){
echo "<td>.$cp->toHTML($playername).</td>";
}
?>
Le code n'est pas très compliqué... Je pense en avoir saisi le fonctionnement :D

Mais vu que c'est avec des données extraites du base de donnée, je ne sais pas comment adapter cette fonction à mon code.

Merci d'avance de m'éclairer.