JeuWeb - Crée ton jeu par navigateur
doublearray - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : doublearray (/showthread.php?tid=3645)

Pages : 1 2


doublearray - biboum - 06-02-2009

Bonjour, j'aimerai pouvoir comprendre comment marche les doubles array.
Ca se présente comme ca :



Code PHP :
<?php $coordonnees = array(=> array('tom','moto'), 2=>array('tom','voiture'), 3=>array('yoan','moto')
);


Mais...

Dans mon cas précis, imaginons que j'ai des pommes, et des oranges, et que pour faire du jus de fruits, il me faut 10pommes et 3oranges. Comment je fais pour lui dire "if isset(10pommes) AND isset (3orange) = 1fruit"; Mais dans l'array...


RE: doublearray - Allwise - 06-02-2009

Salut, dans ton code il y a une erreur, il manque un index.
Sinon, une simple boucle peut faire l'affaire. Tu parcours ton tableau, et à chaque fois que tu rencontres l'occurrence recherchée tu incrémentes une variable.

Code PHP :
<?php
$array
[] = array('orange');
$array[] = array('orange');
$array[] = array('pomme');
$array[] = array('orange');
$array[] = array('pomme')

$compte['pomme'] = 0;
$compte['orange'] = 0;

foreach (
$array as $ar)
{
if (
in_array($ar, 'pomme') )
$compte['pomme']++;
elseif(
in_array($ar, 'orange') )
$compte['orange']++;
}

echo
'Il y a '.$compte['pomme'].' pomme(s) ';
echo
'Il y a '.$compte['orange'].' orange(s) ';
?>

Ca affichera "Il y a 2 pomme(s) et 3 orange(s)".

Tu peux aussi faire une solution plus générique, qui compte automatiquement tous les enregistrements de tes tableaux :
Code PHP :
<?php 
$compte
= array();

foreach(
$array as $ar)
{
foreach (
$ar as $valeur)
{
if (!isset(
$compte[$valeur]))
$compte[$valeur] = 1;
else
$compte[$valeur]++;
}
}

foreach (
$compte as $k=>$v)
echo
'Il y a ', $v, ' ', $k, '(s)<br />';



RE: doublearray - biboum - 06-02-2009

Hummmm, j'explique plus précisément ce que je veux faire Smile
Imagine que tu as une usine qui produit des jus de fruits.

Pour 1jus de fruit, il faut SOIT 10tomates, SOIT 4agrumes, etc.

donc j'essaye pour le moment de voir l'occurence par rapport au stock disponible, mais ca ne marche pas...
Code PHP :
<?php 
$jusfruits
= array("pomme" => "10",
"banane" =>"8",
"tomate" =>"12",
"agrumes" =>"5",
"mangue" => "15",
"melon" => "10",
"raisin" =>"20",
"eau" => "15"
);

for (
$numero = 0; $numero < 9; $numero++)
{
$stock = mysql_query("SELECT SUM(valeur) as valeur FROM c_stock WHERE pays='".$a['paysjoue']."' AND entreprise='".$usines['entreprise']."' AND territoire='".$usines['territoire']."' AND pays='".$usines['pays']."' AND type='".$jusfruits[$numero]."'");
$stocks = mysql_fetch_array($stock);

echo
$stocks['valeur'];

}



RE: doublearray - Allwise - 06-02-2009

Salut, j'ai du mal à comprendre ce que tu cherches à faire, mais ça commence à rentrer. Smile

Tout d'abord, dans ta requête il y a des problèmes.
Elle ne peut pas marcher, premièrement parce que ta clause WHERE, tu exprimes deux conditions pour le champ pays : tu exiges qu'il soit égal à $usines['pays'] et égal à $a['paysjoue']. Ca ne peut marcher que si ces deux variables se valent, puis de toute façon inutile de mettre 2 fois cette condition.
Ensuite, pour comparer des chaines de caractères dans tes conditions, il est préférable d'utiliser LIKE, plutôt que =, qui est réservé aux nombres.

Enfin, plutôt que d'envoyer 9 fois la même requête, tu pourrais l'envoyer une seule fois en modifiant ta condition et en faisant un truc genre
Code :
SELECT .... FROM .... WHERE ... AND (type LIKE "orange" OR type LIKE "pomme"...)

Sinon, pour les problèmes comme ça, je te conseille de décortiquer ton code pour déceler l'erreur. Prends l'habitude d'afficher tes variables pour connaître leur valeur lors de l'exécution du script.
Pense également à afficher les erreurs mysql avec la fonction mysql_error() ( cf php.net pour plus d'infos ), et à afficher tes requêtes.

Pour en revenir à ton problème, a priori rien ne s'affiche, et ça vient clairement de ta requête SQL.
Autre chose, quand tu fais
Code PHP :
<?php 
AND type='".$jusfruits[$numero]."'"
ton $jusfruits[$numero] vaut un nombre : 10, 8, 12... Est-ce bien ça que tu veux afficher ? Ou le nom de ton jus de fruit ?
Si tu veux bien afficher ce nombre, tu peux supprimer les guillemets ( ça changera rien mais c'est plus correct ).
Si tu veux afficher le nom des jus de fruit, il faut afficher la clé du tableau et non sa valeur.
Pour cela, il faut utiliser la fonction key :
Code PHP :
<?php 
key
($jusfruits);
Et il faut déplacer le curseur du tableau à l'enregistrement suivant, sans quoi tu afficherais toujours le même jus de fruit. ça donne :
Code PHP :
<?php 
key
($jusfruits);
next($jusfruits);

Voilou, t'as de quoi faire Wink


RE: doublearray - biboum - 06-02-2009

Merci, en effet de nombreuses erreurs Smile
Une heure que je bloque sur ma requête...trop habitué à faire une requête avec une demande de pays que je ne vois même plus qu'il y en adeux, et deux différents...^^

En revanche, les array, toujours aussi compliqué, j'ai rien compris.

Donc je récapitule.
Là j'ai un tableau avec mes différents besoins. 8 pommes, 10agrumes, etc...


Moi ce que je veux, c'est voir combien j'ai en stock de TOUT les fruits possibles, et voir combien de produits je peux produire avec les fruits que j'ai en stock.

Mais du coup ce n'est pas une boucle qu'il faut que j'utilise si ?


RE: doublearray - Allwise - 06-02-2009

Ok j'ai compris !

Alors, il faut que tu comptes le nombre de fruits dans ta table, et que tu groupes les résultats par fruits.
Ca te donnerait une requête du genre :
Code PHP :
<?php 
'SELECT type, COUNT(type) as nbFruits FROM ... GROUP By type';
Tu obtiendras, comme résultat :
Code :
type | nbFruits
---------------
orange | 12
pomme | 16
cucurbitace | 6
patate | 9
(ok, y a pas que des fruits, mais c'était pour l'exemple).
Ensuite, il ne te reste plus qu'à confronter ces résultats avec le nombre de fruits requis pour faire un jus.
Si, dans ta table c_stock, tu avais aussi le nombre de fruits requis nb_fruits_requis pour faire un jus, tu aurais pu faire
Code PHP :
<?php 
'SELECT type, ROUND(COUNT(type)/nb_fruits_requis,0) as nbJus FROM ... GROUP By type';
Et tu aurais directement le nombre de jus nbJus pour chaque fruits.


RE: doublearray - biboum - 07-02-2009




RE: doublearray - phenix - 07-02-2009

On appel ce genre tableau, des tableaux a 2 dimensions.

Imagine l'array suivant:
Code PHP :
<?php 
$tab
= array(
1 => array(
'pomme' => 10,
'poire' => 2
),
2 => array(
'fraise' => 1,
'framboise' => 3)
);

Ensuite, PHP gère parfaitement ce genre de tableau, par exemple, je veux le nombre de pomme:
Code PHP :
<?php 
echo $tab[1]['pomme'];

Affichera 10.

C'est très pratique pour associé par exemple, l'id d'un jour et c'est caractéristique.

dans le cas ou tu voudrais récupéré pomme, l'utilisation de la fonction array_flip t'aidera car il inversera les clées et les valeurs.

J'espère que cela t'aide.


RE: doublearray - wild-D - 07-02-2009

(07-02-2009, 10:37 AM)phenix a écrit : dans le cas ou tu voudrais récupéré pomme, l'utilisation de la fonction array_flip t'aidera car il inversera les clées et les valeurs.

J'espère que cela t'aide.

tout droit sorti de la doc php
<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
?>

array_flip est à utiliser avec bon sens; si tu ne peux pas garantir que les valeur sont toutes uniques.. on n'aura plus que la dernière paire "valeur_présente_plusieurs_fois=>clé" au final


RE: doublearray - Allwise - 07-02-2009