POO probleme d'array et d'object
le lezard
-
le lezard -
le lezard -
Bonjour,
Je débute en PHP et en POO et comme tout debutant, je rencontre tout un tas de problemes don celui ci que je n'arrive pas à résoudre.
Je vous montre mon code et je vous explique mon probleme ensuite.
$_POST['perso1'] etant = The Tchernobyl man et $_POST['perso2'] = The Elephant man
j'obtiens dans mon print_r ceci:
Array ( [0] => Personnage Object ( [id:Personnage:private] => [nom:Personnage:private] => [degats:Personnage:private] => [_nom] => The Elephant man [_degats] => 0 )
[1] => Personnage Object ( [id:Personnage:private] => [nom:Personnage:private] => [degats:Personnage:private] => [_nom] => The Tchernobyl man [_degats] => 0 ) )
Hors ça ne correspond pas à ce que l'utilisateur à entré car dans mon print_r, [0] contient The Elephant man et le [1] contient The Tchernobyl man.
Ce que je voudrai, c'est que $_POST['perso1'] soit toujours = à [0] et que $_POST['perso2'] soit toujours = à [1].
Je vous montre ma fonction get:
Voila, j'espere que j'ai été clair car j'ai eu un peu de mal à expliquer.
Merci.
Je débute en PHP et en POO et comme tout debutant, je rencontre tout un tas de problemes don celui ci que je n'arrive pas à résoudre.
Je vous montre mon code et je vous explique mon probleme ensuite.
$persosc = $manager -> get(array($_POST['perso1'], $_POST['perso2']));
print_r($persosc);
$_POST['perso1'] etant = The Tchernobyl man et $_POST['perso2'] = The Elephant man
j'obtiens dans mon print_r ceci:
Array ( [0] => Personnage Object ( [id:Personnage:private] => [nom:Personnage:private] => [degats:Personnage:private] => [_nom] => The Elephant man [_degats] => 0 )
[1] => Personnage Object ( [id:Personnage:private] => [nom:Personnage:private] => [degats:Personnage:private] => [_nom] => The Tchernobyl man [_degats] => 0 ) )
Hors ça ne correspond pas à ce que l'utilisateur à entré car dans mon print_r, [0] contient The Elephant man et le [1] contient The Tchernobyl man.
Ce que je voudrai, c'est que $_POST['perso1'] soit toujours = à [0] et que $_POST['perso2'] soit toujours = à [1].
Je vous montre ma fonction get:
Je pense que le probleme vient du fait que The Elephant man vient avant The Tchernobyl man dans la BDD.
public function get($info)
{
$req = $this->_bdd->query('SELECT * FROM personnage WHERE nom IN(' . implode(',', array_map(array($this->_bdd, 'quote'), $info)) . ')ORDER BY id');
while($donnees = $req -> fetch(PDO::FETCH_ASSOC))
{
$persosc[] = new Personnage($donnees);
}
return $persosc;
}
Voila, j'espere que j'ai été clair car j'ai eu un peu de mal à expliquer.
Merci.
2 réponses
-
Salut,
Si tu es arrivée au chapitre POO, c'est ce que tu as dépassé le niveau débutant en PHP.
Tu essayes de faire quoi avec "array_map" ?
Pour ta question, effectivement, l'ordre des résultats dépend de ta requête et de l'ordre d'enregistrement !
Tu peux par exemple utiliser un switch dans le ORDER BY !
PS : à tester :public function get($info) { if(empty($info)) return null; $newInfos = array(); foreach($infos AS $id=>$val) if(!in_array($val, $newInfos)) $newInfos[':val' . $id] = $val; $inValues = ''; $cases = ''; $pos = 1; foreach($newInfos AS $key => $value) { $inValues .= $key . ','; $cases .= ' WHEN ' . $key . ' THEN ' . ($pos++); } $inValues = rtrim($inValues, ','); $cases = 'CASE _nom' . $cases . ' END'; $req = $this->_bdd->prepare(' SELECT * FROM personnage WHERE nom IN(' . $inValues . ') ORDER BY ' . $cases); $req->execute($newInfos); $persosc = array(); while($donnees = $req->fetch(PDO::FETCH_ASSOC)) { $persosc[] = new Personnage($donnees); } return $persosc; }
Mettez en résolu quand c'est résolu ... -
oui c'est vrai, j'aurais du mettre que jétais débutant en POO et pas en php.
Bon désolé si j'ai mis du temps à répondre, seulement, je suis en train d'étudier ta réponse afin de l'adapter à mon code.
Merci pour l'aide.