Explode sur la meme variable

Mammouth du PHP | 643 Messages

29 juin 2015, 23:44

Salut je souhaite récupérer plusieurs contenu d'un fichier xml du même explode, Je mexplique j'ai une balise qui se nomme longdescription, exemple:

<longDescription>20/10/2015 20:30|21/10/2015 20:30</longDescription>
// on recupere la date start
// Date de début
$date_start  = addslashes($item->longDescription);
 $debut_event = explode(" ", $date_start);
echo $debut_event[0];

// on recupere la date end
// Date de fin
$date_end  = addslashes($item->longDescription);
$fin_event = explode("|", $date_end );
echo $fin_event[0];

Maintenant mon problème que $date_end m'affiche par exemple : 29/09/2015 19:00
Alors que je ne souhaite que la date ( 29/09/2015 )

A savoir que <longDescription>20/10/2015 20:30|21/10/2015 20:30</longDescription> peut etre également:
<longDescription>20/10/2015 20:30</longDescription>
C'est à dire sans la date_end donc comment faire pour dire si il ne trouve pas date_end alors date_end = NULL.

Merci à vous tous.

Mammouth du PHP | 688 Messages

29 juin 2015, 23:58

tu commences par |
et selon que tu as 1 ou 2 éléments dans ton tableau, tu fais le nécessaire.

Mammouth du PHP | 643 Messages

30 juin 2015, 07:08

Salut en fait pour ça je fait :
// Date de début
	$date_start  = addslashes($item->longDescription);
    $debut_event = explode(" ", $date_start);
	echo $debut_event[0];
	
	// Date de fin
	$date_end  = addslashes($item->longDescription);
	$fin_event = (explode('|', $date_end, 2));
	echo $fin_event[0];
Mais $fin_event me renvoie 10/06/2015 20:30.
Je souhaite uniquement 10/06/2015

Et si $fin_event n'as rien ds l'explode alors $fin_event == NULL
Merci encore

Eléphanteau du PHP | 23 Messages

30 juin 2015, 13:39

comme disait tof73, tu as commencé par le côté le plus compliqué. commence plutôt par le "|" comme ça :

Code : Tout sélectionner

$longDescription = "20/10/2015 20:30|21/10/2015 20:30"; $decoupe = explode("|", $longDescription); $dateDebut = $decoupe[0]; if (!isset($decoupe[1])) { $dateFin = NULL; } else { $dateFin = $decoupe[1]; }
et ensuite tu peux t'occuper d'extraire le jour de $dateDebut ou $dateFin

Mammouth du PHP | 643 Messages

30 juin 2015, 14:10

Longdescription peut comporter une date ou deux c'est aleatoire. C'est surtout ca mon soucis...longdescription peut etre : 20/12/2015 12:15 mais peut etre aussi 12/06/2015 20:30 | 20/03/2015 09:00. Donc ca peut avoir une date comme deux date dou mon probleme.

Eléphanteau du PHP | 23 Messages

30 juin 2015, 15:07

tu as essayé mon code ? il y a le test qui gère le découpage suivant qu'il y ait une ou deux dates

ViPHP
xTG
ViPHP | 7331 Messages

30 juin 2015, 15:25

Et si plus de deux dates on peut généraliser le code proposé par mathieur269 en utilisant une boucle for ou foreach. ;)

Mammouth du PHP | 643 Messages

30 juin 2015, 16:54

Alors j'ai testé et modfier 2 petits truc:
ça me ressort pr date début par exemple :
Début 04/12/2015 19:00
Je souhaite que le date et l'heure soit à part et non tout ensemble.

Le truc c'est que long description:
<longDescription>20/10/2015 20:30</longDescription>
la date est l'heure sont séparé par un espace...

Le code:
// on parcourt le tag longDescription du XML
	$longDescription = addslashes($item->longDescription);
	$decoupe = explode("|", $longDescription);
	$dateDebut = $decoupe[0];
	
	// si il n y a pas de date de fin alors je lui attribue la date de début
	if (!isset($decoupe[1])) {
	   $dateFin = $dateDebut;
	} else {
	   $dateFin = $decoupe[1];
	}
	
	// on affiche les date de début et de fin
	echo '<strong>Début</strong>' .$dateDebut .'<br>';
	echo '<strong>Fin</strong>' .$dateFin .'<br><br><br>';

Mammouth du PHP | 643 Messages

30 juin 2015, 17:33

Re, bon j'ai cherche sur php manual et trouver la fonction function multiexplode
Mon code pour ceux que ça intéresse :
// on parcourt le tag longDescription du XML
	$longDescription = addslashes($item->longDescription);
	$decoupe = multiexplode(array("|"," ","|"," "),$longDescription);
	
	$dateDebut = $decoupe[0];
	$heureDebut = $decoupe[1];
	
	$datefin = $decoupe[2];
	$heurefin = $decoupe[3];		
		
	if (!isset($decoupe[2])) {
	$dateFin = $dateDebut;
	} else {
	$dateFin = $decoupe[2]; 
	}
	
	if (!isset($decoupe[3])) {
	$heurefin = $heureDebut;
	} else {
	$heurefin = $decoupe[3]; 
	}
	
	
	
	// on affiche les date de début et de fin
	echo '<strong>Date début</strong>' .$dateDebut .'<br>';
	echo '<strong>Horaire début</strong>' .$heureDebut .'<br><br><br>';
	
	echo '<strong>Date Fin</strong>' .$dateFin .'<br>';
	echo '<strong>Horaire Fin</strong>' .$heurefin .'<br><br><br>';
	
	echo'---------------------------------<br>';

Mammouth du PHP | 643 Messages

30 juin 2015, 17:49

Donc ca marche mais les date ne s'insere pas en bdd pour tt le reste c ok,
Les date sont les colone date_debut_sortie et date_fin_sortie
J'arrive bien a recupérer les date car ca me ressort exemple:
Insertion en bdd
Titre: LES AMBASSADEURS AVEC SALIF KEITA
Date début 07/08/2015
Horaire début 18:30

Date Fin07/08/2015
Horaire Fin18:30

Mais lors de l'echo certaines entrée sont : vide ( je n'ai que le titre dans cet exemple )
Titre: BERNARD MABILLE SUR SCENE
Date début
Horaire début


Date Fin
Horaire Fin




Mon code complet:
<?php
     include("conndb.php");
    include("include/variables.php");

    /* For the following details, ask your server vendor  */
	if(strstr($_SERVER['HTTP_HOST'], '127.0.0.1')) {
		$dbhost = "localhost";
		$dbuser = "root";
		$dbpass = "";
		$dbname = "base";
	}else {
		$dbhost = "*******";
		$dbuser = ""*******";";
		$dbpass = ""*******";";
		$dbname = ""*******";";
	}
    mysql_connect( $dbhost, $dbuser, $dbpass ) or die ( "Unable to connect to MySQL server" );
    mysql_select_db( $dbname ) or die ('Echec');
    mysql_query( "SET NAMES utf8" ); 

   // Apel du fichier XML
    $flux = simplexml_load_file('zxpd_201506260440_3467_31592008.xml'); // Source du flux.xml
	
    $type  = array(  
            			 // Coffret cadeau
                         'CCA|Carte cadeau' => 20, 'COB|Coffrets Bien-être' => 20, 'COS|Coffrets Séjours' => 20, 'COG|Coffrets Gastronomie' => 20, 'COA|Coffrets Activités' => 20,
                         'COE|Coffrets Enfants' => 20, 'CHM|Coffrets Homme' => 20, 'COS|Coffrets Femme' => 20, ' CPS|Coffrets Sport/Pilotage' => 20, ' CAO|Coffrets Originaux/Atypiques' => 20,
                         'CMT|Coffrets Multithématiques' => 20, 'CLU|Coffrets luxe' => 20, 'CDI|Coffrets divers' => 20,
                          
                         // Cinéma
                         'FIL|Film' => 18, 'ACI|Abonnement/Pass cinéma' => 18, 'ACT|Action' => 18, 'ANI|Animation' => 18, 'ARM|Arts martiaux' => 18, 'AVE|Aventure' => 18, 'AVP|Avant-première' => 18, 'BIO|Biopic' => 18, 'BOL|Bollywood' => 18, 'CIC|Ciné-concert' => 18,
                         'CIE|Cinéma jeune public' => 18, 'CLA|Classique' => 18, 'COD|Comédie dramatique' => 18, 'COM|Comédie' => 18, 'DEA|Dessin animé' => 18, 'DIV|Divers' => 18, 'DOC|Documentaire' => 18, 'DRA|Drame' => 18, 'EPO|Epouvante-horreur' => 18, 'ERO|Erotique' => 18,
                         'ESP|Espionnage' => 18, 'FAN|Fantastique ' => 18, 'FCE|Comédie érotique' => 18, 'FFA|Famille' => 18, 'GUE|Guerre' => 18, 'HIS|Historique' => 18, 'JUD|Judiciaire' => 18, 'MED|Médical' => 18, 'MOB|Mobisode' => 18, 'MUS|Musical' => 18,
                         'NUI|Nuit à thème (cinéma)' => 18, 'PEP|Péplum' => 18,  'POL|Policier' => 18, 'ROM|Romance' => 18, 'SCF|Science fiction' => 18, 'SOA|Soap' => 18, 'THR|Thriller' => 18,
                         'WEB|Web série' => 18, 'WES|Western' => 18, '131F|Cinéma' => 18,  '13CI|Cinéma' => 18, 'ROC|Retransmission Opéra/Concert ;' => 18, '81F|Cinéma' => 18, '8CI|Cinéma' => 18,
                        );
       
 // On entre les entrees en bdd 
function multiexplode ($delimiters,$string) {
   
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
	}                
    foreach ($flux->product as $item) {
		

    // Récupération des données en fonction du tagname du XML
    $titre = addslashes($item->name);
    $price = $item->price;
    $url_fnac = $item->deepLink;
    $street = addslashes($item->terms);
    $photo = $item->largeImage;
    $genre = $item->merchantCategoryPath;
	$description = 'Une sortie proposé par notre parnetaire Fnac, trouvez la sortie du moment qui vous correspond, <a class="lien" href="'.$url_fnac.'">découvrez le descriptif complet.</a> ';
	
    // Code postal
    $postcode  = addslashes($item->extra2);
    $pieces = explode(" | ", $postcode);
	
	  // on parcourt le tag longDescription du XML
	  $longDescription = addslashes($item->longDescription);
	  $decoupe = multiexplode(array("|"," ","|"," "),$longDescription);
	  
	  // Début événement
	  $dateDebut = $decoupe[0];
	  $heureDebut = $decoupe[1];
	  
	  
	  // si il n y a pas de date de fin alors je lui attribue la date de début
	  if (empty($decoupe[0])) {
	  $dateDebut = NULL;
	  } else {
	  $decoupe[0] = $dateDebut; 
	  }
	  
	  // si il n y a pas de date de fin alors je lui attribue la date de début
	  if (empty($decoupe[0])) {
	  $heureDebut = NULL;
	  } else {
	  $decoupe[0] = $heureDebut; 
	  }
	  

	  // si il n y a pas de date de fin alors je lui attribue la date de début
	  if (empty($decoupe[2])) {
	  $dateFin = $dateDebut;
	  } else {
	  $decoupe[2] = $dateFin; 
	  }
	  
	  // si il n y a pas d'heure de fin alors je lui attribue l'heure de début
	  if (empty($decoupe[3])) {
	  $heurefin = $heureDebut;
	  } else {
	  $heurefin = $decoupe[3]; 
	  }
	  
	  // on affiche heure et date de début
	  echo '<strong>Titre: </strong>' .$titre .'<br>';
	  echo '<strong>Date début</strong>' .$dateDebut .'<br>';
	  echo '<strong>Horaire début</strong>' .$heureDebut .'<br><br><br>';
	  
	  // on affiche heure et date de fin
	  echo '<strong>Date Fin</strong>' .$dateFin .'<br>';
	  echo '<strong>Horaire Fin</strong>' .$heurefin .'<br><br><br>';
	  
	  // séparation des données
	  echo'---------------------------------<br>';
	  

	
    // On attribut le département en fonction des 2 premiers chiffre du code postal
    $departement = substr($postcode, 0, 2);
     
    $region = regionIdByDepartement($departement);
     
    // Attribution de la valeur id 1010 pour la fnac
    $id_simply_user = '999';
     
    // On valide la sortie par default
    $valide = '1';
	
	

	foreach (explode(' ; ', /*(string)*/ $item->merchantCategoryPath) as $subtype) {
	$id_type_loisirs = $type[$subtype];
	
	}  
	
	
	$result = mysql_query("SELECT id_loisirs FROM loisirs WHERE titre = ".$titre.", city = ".$pieces[2].", postcode = ".$pieces[1].", date_debut_sortie = ".$dateDebut.", date_fin_sortie = ".$dateFin."");
	if(mysql_num_rows($result) == 1){
		
	//Entrée déjà existante
	echo 'Cette entrée existe déjà';
	
	}else{
		
	 $sql = "INSERT INTO `matable` (id_simply_user,titre,price,photo,url_fnac,date_debut_sortie,horaire_debut,date_fin_sortie,horaire_fin,description,street,postcode,city,id_region,id_departements,id_type_loisirs,valide) VALUES ('$id_simply_user','$titre','$price','$photo','$url_fnac','$dateDebut', '$heureDebut', '$dateFin', '$heurefin', '$description','$street','$pieces[0]','$pieces[1]','$region','$departement','$id_type_loisirs','$valide')";
  $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  echo 'Insertion en bdd';
	}
	}
?>

Mammouth du PHP | 643 Messages

01 juil. 2015, 07:31

Alors c'est tout bon sauf que certains données ds le XML peuvent resembler à ceci :

<longDescription>14/07/2015 19:45|15/07/2015 19:45|16/07/2015 19:45|17/07/2015 19:45|18/07/2015 19:45|21/07/2015 19:45|22/07/2015 19:45|23/07/2015 19:45|24/07/2015 19:45|25/07/2015 19:45|28/07/2015 19:45|29/07/2015 19:45|30/07/2015 19:45|31/07/2015 19:45|01/08/2015 19:45|04/08/2015 19:45|05/08/2015 19:45|06/08/2015 19:45|07/08/2015 19:45|08/08/2015 19:45|11/08/2015 19:45|12/08/2015 19:45|13/08/2015 19:45|14/08/2015 19:45|15/08/2015 19:45|18/08/2015 19:45|19/08/2015 19:45|20/08/2015 19:45|21/08/2015 19:45|22/08/2015 19:45|25/08/2015 19:45|26/08/2015 19:45|27/08/2015 19:45|28/08/2015 19:45|29/08/2015 19:45|01/09/2015 19:45|02/09/2015 19:45|03/09/2015 19:45|04/09/2015 19:45|05/09/2015 19:45|08/09/2015 19:45|09/09/2015 19:45|10/09/2015 19:45|11/09/2015 19:45|12/09/2015 19:45|15/09/2015 19:45|16/09/2015 19:45|17/09/2015 19:45|18/09/2015 19:45|19/09/2015 19:45|22/09/2015 19:45|23/09/2015 19:45|24/09/2015 19:45|25/09/2015 19:45|26/09/2015 19:45|03/10/2015 18:00|10/10/2015 18:00|17/10/2015 18:00|24/10/2015 18:00|31/10/2015 18:00|07/11/2015 18:00|14/11/2015 18:00|21/11/2015 18:00|28/11/2015 18:00|05/12/2015 18:00|12/12/2015 18:00|19/12/2015 18:00|26/12/2015 18:00</longDescription>

J'aimerais récupérer que du coup la premiere date et la premiere heure ainsi que la dernière date et la dernière heure...
Comment procéder svp ?
merci à vous