POO probleme d'array et d'object

Fermé
le lezard - 8 janv. 2014 à 16:13
 le lezard - 9 janv. 2014 à 14:37
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.

$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:

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;
}
Je pense que le probleme vient du fait que The Elephant man vient avant The Tchernobyl man dans la BDD.

Voila, j'espere que j'ai été clair car j'ai eu un peu de mal à expliquer.
Merci.

2 réponses

JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 8/01/2014 à 20:09
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 ...
0
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.
0