IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Deux arrays toujours égaux [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut Deux arrays toujours égaux
    Bonjour à tous !
    J'utilise Symfony 4.3 mais je ne pense pas que le problème vienne d'une spécificité du framework mais plus d'un point technique de PHP.
    Afin de réaliser un traitement différencié je souhaite compter le nombre d'élément dans deux arrays. Le souci c'est que selon mes tests (avec les throw Exception()) Les 2 tableaux comportent toujours exactement le même nombre d'élément.
    J'utilise la fonction count(array $monArray) pour effectuer le comptage.
    Je vous joins le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    public function edit(Request $request, Reparation $reparation, \Swift_Mailer $mailer): Response
        {
            $this->denyAccessUnlessGranted('EDIT', $reparation);
            $user = $this->getUser();
            $form = $this->createForm(ReparationType::class, $reparation);
            $form->handleRequest($request);
            // va servire pour la comparaison des produits et dont si le stockNotifier se déclanche
            $produits = $reparation->getProduits();
            $listeProduits1[] = null;
            foreach ($produits as $produit) {
              array_push($listeProduits1, $produit->getId());
            }
     
            if ($form->isSubmitted() && $form->isValid()) {
              $entityManager = $this->getDoctrine()->getManager();
                $etatReparation = $form->get('statu')->getData();
                $produits = $reparation->getProduits();
     
                foreach ($produits as $produit) {
                  $reparation->addProduit($produit);
                  $produit->addReparation($reparation);
                  $this->getDoctrine()->getManager()->persist($produit);
                }
     
                $this->getDoctrine()->getManager()->persist($reparation);
                $this->getDoctrine()->getManager()->flush();
     
                }
                /* une fois que toutes les données sont persist et flush
                 * je vais faire en sorte de déterminer les action sur les $produits
                 * et si les quantité sont dans les alertes envoyer un email au garagiste
                 */
                 $produits = $reparation->getProduits();
                 $listeProduits2[] = null;
                 foreach ($produits as $produit) {
                   array_push($listeProduits2, $produit->getId());
                 }
     
                 if (count($listeProduits1) == count($listeProduits2)) {
                   throw new \Exception("lp1 = lp2", 1);
                   //faire le array_diff dans n'importe quel sens.
                 }
     
                 elseif (count($listeProduits1) > count($listeProduits2)) {
                   throw new \Exception("lp1 > lp2", 1);
     
                   // cas où il y a trop de produit dans l'édition de la réparation. Il les enlever et les remettre dans le stock
                   $listeProduitdefinitive = array_diff($listeProduits1, $listeProduits2); // différence entre les deux listes
     
                   foreach ($listeProduitdefinitive as $produit) {
                     $quantite = $produit->getQuantite();
                     $produit->setQuantite($quantite+1);
                     $entityManager->persist($produit);
                     }
     
                   }elseif (count($listeProduits1) < count($listeProduits2)) {
                     throw new \Exception("lp1 < lp2", 1);
     
                     // cas où la réparation ne compte pas assez de produits par rapport a la meme réparation passer durant l'édition
                     // il faut déduire des stock la nouvelle quantité pour chaque produits
                     $listeProduitdefinitive = array_diff($listeProduits2, $listeProduits1);
                     foreach ($listeProduitdefinitive as $produit) {
                       $quantite = $produit->getQuantite();
                       if ($quantite <=0 ) {
                         $quantite = 0;
                       }else {
                         $quantite = $quantite - 1;
                       }
                       $produit->setQuantite($quantite);
                       $entityManager->persist($produit);
                     }
                   }else {
                     throw new \Exception("Aucun des cas ne correspondent", 1);
     
                   }
     
                return $this->redirectToRoute('reparation_index');
            }
     
            return $this->render('reparation/edit.html.twig', [
                'reparation' => $reparation,
                'form' => $form->createView(),
                'user' => $user,
            ]);
        }
    En espérant que vous pourrez m'aider !
    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, êtes vous sur de rentrer dans cette condition ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
     if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $etatReparation = $form->get('statu')->getData();
                $produits = $reparation->getProduits();
     
                foreach ($produits as $produit) {
                    $reparation->addProduit($produit);
                    $produit->addReparation($reparation);
                    $this->getDoctrine()->getManager()->persist($produit);
                }
     
                $this->getDoctrine()->getManager()->persist($reparation);
                $this->getDoctrine()->getManager()->flush();
     
            }

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Et même en rentrant dans la condition, je ne vois pas vraiment de modifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $produits = $reparation->getProduits();
     
    foreach ($produits as $produit) {
        $reparation->addProduit($produit);
        $produit->addReparation($reparation);
        $this->getDoctrine()->getManager()->persist($produit);
    }
     
    $this->getDoctrine()->getManager()->persist($reparation);
    $this->getDoctrine()->getManager()->flush();
    Tu prends les produits liés à une réparation, tu les lies à cette même réparation et réciproquement, et tu enregistre. Où sont les changements ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par Celira Voir le message
    Et même en rentrant dans la condition, je ne vois pas vraiment de modifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $produits = $reparation->getProduits();
     
    foreach ($produits as $produit) {
        $reparation->addProduit($produit);
        $produit->addReparation($reparation);
        $this->getDoctrine()->getManager()->persist($produit);
    }
     
    $this->getDoctrine()->getManager()->persist($reparation);
    $this->getDoctrine()->getManager()->flush();
    Tu prends les produits liés à une réparation, tu les lies à cette même réparation et réciproquement, et tu enregistre. Où sont les changements ?
    Il injecte une réparation, j'imagine que cette réparation appelle des nouveaux produits, qu'il aoute dans la db produit, ce qui devrais augmenté la quantité, si j'ai bien compris

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 109
    Par défaut Condition vérifiée
    Bonjour,
    Premièrement je vous remercie pour vos commentaires.
    Pour répondre à la première question oui j'entre bien dans la condition de la soumission du formulaire. J'ai effectué quelques tests avec la commande thrown Exception() qui m'indiquée que les listes 1 et 2 sont toujour égales.
    Pour répondre a la question de celira, comme le disaait maitrePyros j'injecte la réparation dans la fonction.
    Je ne comprends pas trop pour les listes sont toujours égales.
    Avez vous des recommandations ou des tests que je peux pratiquer pour vous aider ?
    Merci

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Oui, ben il y a un truc qui vas pas, il me semble , tu récupère les produits dasn réparation pour mettre dans produit et aussi mettre réparation dans produit....il y a un truc que je vois pas bien.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    On devrait peut-être reprendre depuis le début : quel est le but du formulaire et de la fonction en général ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] recuperer les elements existant dans deux array
    Par moukit233 dans le forum Langage
    Réponses: 6
    Dernier message: 12/10/2009, 12h20
  2. Comparer deux array
    Par snyfir dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/02/2009, 06h54
  3. [Tableaux] calcul sur deux array
    Par gemça dans le forum Langage
    Réponses: 5
    Dernier message: 19/12/2007, 07h29
  4. Comparaison de données entre deux arrays
    Par sironimo dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 20/04/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo