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

Laravel PHP Discussion :

Erreur : array to string conversion


Sujet :

Laravel PHP

  1. #1
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut Erreur : array to string conversion
    Bonjour à tous,

    J'ai une erreur sur la fonction array_diff qui me retourne une erreur "array to string conversion" mais je ne vois pas pourquoi.

    Voici 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
     
    public function read() {
     
    		$ical = new ICal('https://calendar.google.com/calendar/ical/**************/basic.ics');
    		//array contenant les données de basic.ics
                    $array = $ical->events();
     
    		//liste des dates déjà présentes en BD
    		$d = Booking::select(DB::raw('DATE_FORMAT(arrival, "%Y%m%dT%H%i%s%Z")as DTSTART, DATE_FORMAT(departure, "%Y%m%dT%H%i%s%Z")as DTEND'))
    		                  ->where('house_id',2)
    			          ->where('agency_id',2)
    			          ->get()->toArray();
     
     
    		$result = array_diff($array, $d);			
    		dd($result);
    sachant que $array = $ical->events() retourne un tableau comme ceci :
    Nom : Capture.PNG
Affichages : 635
Taille : 9,5 Ko


    et que $d retourne un tableau :
    Nom : Capture2.PNG
Affichages : 602
Taille : 4,1 Ko


    Pourquoi ai-je donc une erreur ?

    Merci beaucoup pour l'aide

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 554
    Par défaut
    array_diff ne s'occupe que de la 1re dimension des tableaux et compare les chaines de caractère des valeurs d'où le message d'erreur :
    https://www.php.net/manual/fr/function.array-diff.php

  3. #3
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Merci pour l'info.

    Y aurait-il un moyen de comparer les deux tableaux au niveau de DTSTART et DTEND ?

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 554
    Par défaut
    vous pouvez comparer les tableaux directement en faisant array_diff($array[0], $d[0]);.

  5. #5
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Ok ok, je reviens sur le sujet en ayant modifié le code pour obtenir une différence sur une collection au lieu d'une différence sur array.

    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
     
    $events = $ical->eventsFromInterval('1 year');
     
     
    		$a = array();
    		foreach ($events as $key => $event) {
    				$dtstart = $ical->iCalDateToDateTime($event->dtstart_array[3]);
    				$dtend = $ical->iCalDateToDateTime($event->dtend_array[3]);
                    $a[] = $dtstart->format('Y-m-d H:i:s');
                    $a[] = $dtend->format('Y-m-d H:i:s');
     
    		}
     
    				$data = Booking::select('arrival', 'departure')				
    					->where('house_id',2)
    					->where('agency_id',2)
    					->get()->toArray();
     
    				$b= array();	
    				foreach($data as $key=> $v){
     
    				$b[] = $v['arrival'];
    				$b[] = $v['departure']; 
     
     
    				}
     
    	$c = collect($a);
     
    	$diff = $c->diff($b);
    	$diff->all();
    	dd($diff);
    $a contient :
    Nom : Capture.PNG
Affichages : 586
Taille : 2,3 Ko

    et $b contient:
    Nom : Capture2.PNG
Affichages : 581
Taille : 2,9 Ko

    $diff m'affiche bien la différence :
    Nom : Capture3.PNG
Affichages : 593
Taille : 3,9 Ko

    J'obtiens 2 lignes dans mon exemple avec 2 dates (mais je pourrais très bien en obtenir une dizaine) et j'ai du mal à identifier laquelle correspond à "arrivée" et celle qui correspond à "départ" puisque je ne dispose que des keys 0,1,2, ...


    Et donc dans l'idéal, je souhaiterais créer une requête d'insertion comme par exemple :

    INSERT INTO booking ('arrival', 'departure') VALUE (resultat de $diff)

    Comment faudrait-il s'y prendre dans ce cas ?

    En vous remerciant pour l'aide.

  6. #6
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Après un W-E de réflexion j'y suis arrivé.

    J'ai du installer via composer la partie qui traite les array multidimensionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Rogervila\ArrayDiffMultidimensional;
    Ensuite pour la comparaison :
    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
    $ical = new ICal('https://calendar.google.com/calendar/ical/***************/public/basic.ics', array(
            'defaultSpan'                 => 2,     // Default value
            'defaultTimeZone'             => 'UTC',
            'defaultWeekStart'            => 'MO',  // Default value
            'disableCharacterReplacement' => false, // Default value
            'filterDaysAfter'             => null,  // Default value
            'filterDaysBefore'            => null,  // Default value
            'httpUserAgent'               => null,  // Default value
            'skipRecurrence'              => false, // Default value
        ));
        $events = $ical->eventsFromInterval('1 year');
    
                    //récupération des événements ICAL dans un array
    		$a = array();
    		foreach ($events as $key => $event) {
    				$dtstart = $ical->iCalDateToDateTime($event->dtstart_array[3]);
    				$dtend = $ical->iCalDateToDateTime($event->dtend_array[3]);
                    $a[] = [
                    'start' => $dtstart->format('Y-m-d H:i:s'),
                    'end' => $dtend->format('Y-m-d H:i:s')
                    ];
    		}
    		
    		//Récupération événements déjà présents en BDD
    
    				$data = Booking::select('arrival', 'departure')				
    					->where('house_id',2)
    					->where('agency_id',2)
    					->orderBy('arrival', 'ASC')
    					->get()->toArray();
    				
    				$b= array();	
    				foreach($data as $key=> $v){
    					
    
    				$b[] = [
    				'start' => $v['arrival'],
    				'end' => $v['departure'],
    				];
    				
    		}
    //Comparaison des array
    
    $insert = ArrayDiffMultidimensional::compare($a, $b);
    //dd($result);
    $delete = ArrayDiffMultidimensional::compare($b, $a);
    //dd($delete);
    Et enfin pour l'insertion ou suppression:
    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
     
    //insertion
    foreach($insert as $key => $value){
    		$house_id = 2;
    		Booking::create([
    		'arrival'=> $value['start'],
    		'departure' => $value['end'],
    		]);
     
    		}
    //suppression		
    		foreach($delete as $key => $value){
    			$house_id = 2;
    			Booking::where('arrival',$value['start'])
    					->where('departure', $value['end'])
     
    					->delete();
     
     
    		}

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

Discussions similaires

  1. erreur de type Array to string conversion
    Par Dango ben dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/02/2020, 19h58
  2. Erreur : Array to string conversion
    Par NewUserDelphi dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2019, 15h03
  3. Erreur avec affichage de "Array to string conversion "
    Par SuisCapable dans le forum Laravel
    Réponses: 0
    Dernier message: 28/11/2018, 09h47
  4. Erreur Multiple Select : Array to string conversion
    Par iamalex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/10/2018, 14h44
  5. [MySQL] Formulaire erreur Array to string conversion
    Par akamaru dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/12/2008, 11h02

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