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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    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 : 498
Taille : 9,5 Ko


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


    Pourquoi ai-je donc une erreur ?

    Merci beaucoup pour l'aide

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 253
    Points : 15 556
    Points
    15 556
    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 habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 253
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    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 : 465
Taille : 2,3 Ko

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

    $diff m'affiche bien la différence :
    Nom : Capture3.PNG
Affichages : 473
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 habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    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