8795 sujets

Développement web côté serveur, CMS

Hello,

Je cherche à remplir un array(); avec plusieurs informations qui viennent d'un formulaire.
Le plus simple est de vous montrer tout ça en direct:
.../random/index.php
sinon pour pouvoir voir le code:
.../random/archive.zip

Ce que je cherche a faire:
l'utilisateur vas remplir les champs du formulaire avec les cartes qui constitue son jeu.
l'utilisateur met: 3 fois la "carte1", 4 fois la "carte2", 16 fois la "carte3", ...
il a le choix d'entrer le nom de la carte et le nombre fois que cette carte sera dans son jeu.

J'entre toute ces carte dans un array();
ex.: le tableau devrais donc ressembler à ça -
$montableau = array(carte1, carte1, carte1, carte1, carte2, carte2, .... carte12, carte12)

Une fois cette opération faite, je fais un shuffle:

shuffle($montableau);
foreach ($montableau as $number) {
echo $number."<br/>";
}


et de se shuffle j'aimerais en sortir 7 au hasard.

hum est-ce clair ?!

Moi j'ai commencer à coder un bout de code mais je m'embourbe un peu.
Pouvez -vous me donner des directions pour que je puisse réussir cette application ?

J'arrive pas à trouver une manière de sortir 7 cartes de mon shuffle.
J'aimerais pouvoir rentrer de manière dynamique mon tableau "$tab".

je reste a votre disposition si c'est pas clair Smiley smile

Charly
Modifié par Chum (05 Mar 2010 - 15:06)
Salut,
shuffle($montableau); 
array_chunk($montableau, 6);
foreach ($montableau as $number) { 
echo $number."<br/>"; 
}


ou bien

shuffle($montableau); 
$i=0;
foreach ($montableau as $number) { 
if($i<7) echo $number."<br/>"; 
$i++;
}

Modifié par matmat (04 Mar 2010 - 22:20)
Salut,


//ça revient au premier exemple de matmat mais sans modifier la variable $montableau
//utilise array_slice au lieu de array_chunk
shuffle($montableau); 
foreach (array_slice($montableau, 6) as $number) { 
     echo $number."<br/>"; 
}




//cette exemple sans faire de shuffle
foreach (array_rand($montableau, 6) as $key) { 
     echo $montableau[$key]."<br/>"; 
}
Salut,

@matmat et jo_link_noir > il n'y a que votre seconde solution qui fonctionne. Smiley cligne

@Chum > après avoir téléchargé ton zip le principal problème est la récupération des variables $_POST : c'est non seulement hyper compliqué mais inefficace puisque tu remplis ton tableau final essentiellement avec des valeurs vides.

Une proposition de solution :
<?php

$montableau = array();

if($_SERVER['REQUEST_METHOD']=='POST') {
	foreach($_POST['nomcarte'] as $key => $value) {
		if(!empty($value) && !empty($_POST['nombrecarte'][$key])) $montableau = array_merge($montableau, array_fill(0, $_POST['nombrecarte'][$key], $value));
	}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<?php	if(empty($montableau)) {	?>
<form action="base.php" method="post">
<?php	for($i = 0; $i < 12; $i++) {	?>
	<p>
		<label for="nombrecarte<?php echo $i; ?>">Nombre de cartes :</label>
		<input type="text" name="nombrecarte[]" id="nombrecarte<?php echo $i; ?>" value="<?php echo mt_rand(1, 25); ?>" />
		<label for="nomcarte<?php echo $i; ?>"> > Nom de la carte :</label>
		<input type="text" name="nomcarte[]" id="nomcarte<?php echo $i; ?>" value="carte <?php echo $i + 1; ?>" />
	</p>
<?php	}	?>
	<p>
		<input type="submit" />
	</p>
</form>
<?php	} else {	
shuffle($montableau); 
$cartes_restantes = 7;
foreach ($montableau as $number) {
	echo '<p>'.$number."</p>\n";
	$cartes_restantes--;
	if($cartes_restantes == 0) break;
}
echo '<p><a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">back</a></p>';
?>

<?php	}	?>
</body>
</html>
@matmat, @jo_link_noir > merci beaucoup pour votre aide !
@Heyoan > comme d'habitude tu me sors de toute mes galère ! (tu serais pas libre par hasard Smiley lol )

Bref:

C'est tout parfait ca marche !

J'aimerais savoir si c'est possible que l'utilisateur n'ai qu'un <textarea></textarea> et qu'il rentre les informations de cette manière:
16 carte 1
4 carte 2
3 carte 4
...

de cette manière il n'est plus limité par mes 12 champ.
Pouvez vous m'indiquer de la doc pour que je puisse coder tout ça ?!

merci beaucoup !

Charly
Modifié par Chum (05 Mar 2010 - 09:57)
Chum a écrit :
tu serais pas libre par hasard
Smiley ravi


Tu pourrais essayer ça pour le TEXTAREA :
<?php 
 
$montableau = array(); 
 
if(!empty($_POST['en_vrac'])) {
	$nomcarte = array();
	$nombrecarte = array();
	$lignes = explode("\n", $_POST['en_vrac']);
	foreach($lignes as $ligne) {
		preg_match('#(\d+)\s+(.+)#', $ligne, $matches);
		if(!empty($matches)) {
			$nombrecarte[] = intval($matches[1]);
			$nomcarte[] = trim($matches[2]);
		}
	}
    foreach($nomcarte as $key => $value) { 
        $montableau = array_merge($montableau, array_fill(0, $nombrecarte[$key], $value)); 
    } 
} 
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Test</title> 
</head> 
<body> 
<?php    if(empty($montableau)) {    ?> 
<form action="base.php" method="post"> 
    <p><textarea name="en_vrac" cols="60" rows="12"></textarea></p>
    <p> 
        <input type="submit" /> 
    </p> 
</form> 
<?php    } else {     
shuffle($montableau);  
$cartes_restantes = 7; 
foreach ($montableau as $number) { 
    echo '<p>'.$number."</p>\n"; 
    $cartes_restantes--; 
    if($cartes_restantes == 0) break; 
} 
echo '<p><a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">back</a></p>'; 
?> 
 
<?php    }    ?> 
</body> 
</html>

Modifié par Heyoan (05 Mar 2010 - 12:21)
C'est nikel as allways !

faudra que je planche un peu sur le code pour apprendre comment ta codé tout ça !

Merci beaucoup !

Sujet résolu !

Charly