8768 sujets

Développement web côté serveur, CMS

Bonjour

Comme indiquer dans le titre j'aimerais savoir si je peux rechercher un mot ( ou un ensemble de mot ) bien précis dans une chaine que j'ai explode et si ce mot (ces mots) est (sont) trouvé, alors sélectionner cette chaine en explode pour récupérer une donnée dedans.


Donc par exemple j'ai ceci :

$recherche_mot = explode(",",$text_a_tester);


Et j'aimerais tester dedans le mot "photo" et si celui-ci est trouver dans ce cas utiliser la chaine où il se trouve.

Par exemple ici on va dire que j'ai comme réponse ceci :

$recherche_mot[3];


Car il a trouver le mot "photo" dans là 4eme partie.
Modifié par Deynox (16 Jun 2014 - 13:58)
Le $recherche_mot[3] comprendrait le mot "photo"

Par exemple disons que :

$texte_a_tester = "Nom de l'album : Paysage , Catégorie : Monde , etc... , Nombre de Photo : 5 , etc...";
$recherche_mot = explode(",",$text_a_tester);


Ici j'aimerais savoir récupérer le nombre 5.
Modifié par Deynox (16 Jun 2014 - 15:25)
Ma 2ème proposition devrait marcher ^^

foreach($recherche_mot as $s)
{
       if(stripos ($s,"photo") !== false)
       {
             $tmp = explode(" : ",$s);
             $valeur=$tmp[1];
             break;
        }
}


Faudrait peut-être optimisé, mais normalement ça devrait être bon ^^
Modifié par Lothindil (16 Jun 2014 - 15:42)
Merci beaucoup pour cette réponse !

J'ai une autre question toujours sur ce même principe.

Puis-je aussi utiliser cette façon pour compter le nombre de fois où apparaît un mot ?

Pour résumer parfois j'ai 2 ou 3 lignes et donc j'aimerais détecter un mot pour savoir combien de ligne je vais avoir et donc savoir combien de fois il va devoir faire la recherche.

Exemple :

Desc 1
Nom de l'album : Paysage , Catégorie : Monde , etc... , Nombre de Photo : 5 , etc...
Desc 2
Nom de l'album : Paysage , Catégorie : Monde , etc... , Nombre de Photo : 2 , etc...
Desc 3
Nom de l'album : Paysage , Catégorie : Monde , etc... , Nombre de Photo : 8 , etc...

J'aimerais ici détecter "Desc" pour savoir qu'il y a 3 lignes ( Et doubler le nombre) et effectuer la recherche a chaque fois sur la 2eme ligne.
Le nom du champ dans ma DB s'appel "info" et voici un exemple de ce qu'il contient.
____________

Enregistré le lundi 15 juin 2014 , à 14h30 , par Admin.

Desc 1
Nom de l'album : Paysage , Catégorie : Monde , Date de création : 15 juin 2014 , Nombre de Photo : 5 , Date de la dernière modification : 16 juin 2014
Desc 2
Nom de l'album : Forêt , Catégorie : Monde , Date de création : 15 juin 2014 , Nombre de Photo : 2 , Date de la dernière modification : 16 juin 2014
Desc 3
Nom de l'album : Montagne , Catégorie : France , Date de création : 15 juin 2014 , Nombre de Photo : 8 , Date de la dernière modification : 16 juin 2014

Photo de mes voyages.

____________

La 1ere ligne sont des infos dont je n'ai pas besoin pour cette recherche, mais j'ai besoin de certaine informations contenu dans les desc. et si possible récupérer aussi la dernière phrase. ( étant donnée que le nombre de Desc peut varié, je n'arrive pas a récupérer la dernière phrase. )
oulà... Smiley sweatdrop ça aurait mérité une table complète ça en fait (en fait 2 tables). Y a un avantage, une nécessité à avoir ce type de champs ?

Sinon euh...
-> tu découpes à /n -saut de ligne (avec explode)

Tu devrais avoir ($d1):
"0"=>Enregistré le lundi 15 juin 2014 , à 14h30 , par Admin.
"1"=>Desc 1
"2"=>"Nom de l'album : Paysage , Catégorie : Monde , Date de création : 15 juin 2014 , Nombre de Photo : 5 , Date de la dernière modification : 16 juin 2014"
"3"=>"Desc" 2
"4"=>"Nom de l'album : Paysage , Catégorie : Monde , Date de création : 15 juin 2014 , Nombre de Photo : 5 , Date de la dernière modification : 16 juin 2014"
"5"=>"Photo de mes voyages."


Tu récupères le nombre de ligne de ce tableau-là (count()) ($nblignes)

Le nombre de desc que tu auras va être égal à ($nblignes-2)/2, mais il n'est pas nécessaire.
le titre est à $d1[$nblignes-1 ]

for($i=2;$i<=$nblignes;$i+2)
{
   /*là tu coupes par la virgule, tu coupes par le : et tu te fais un tableau, ça sera plus simple qui ressemblera à ça :
$desc[]=array("Nom de l'album"=>"Paysage","Catégorie"=>"Monde" , "Date de création"=>"15 juin 2014","Nombre de Photo"=>"5","Date de la dernière modification"=>"16 juin 2014"); */
}


ça devrait te simplifier la vie...
Modifié par Lothindil (16 Jun 2014 - 20:12)
Merci pour cette réponse.

Je comprends le principe, mais je ne suis pas sur de l'appliquer correctement.

J'ai découper avec un explode /n ma variable dans la quelle j'ai récupérer mon champ "info", mais ensuite dois-je faire ceci ?

$d1 = explode("\n",$info);
$nblignes = count($d1);
$i = ($nblignes-2)/2;
for($i=2;$i<=$nblignes;$i+2){
}
$i = ($nblignes-2)/2; >> cette ligne-là n'a pas d'utilité.

Pour mieux comprendre ce que tu vas faire, remplace ton for actuel par ceci :
?><pre><?php var_dump($d1);?></pre><?php 
for($i=2;$i<=$nblignes;$i+2){
echo $i."-";
}


C'est quoi ce var_dump() ? C'est LE truc le plus utile à mon goût, je l'utilise tout le temps. Il va t'afficher le résultat de ton découpage. On aurait pu utiliser un print_r(), mais var_dump à l'avantage de marcher sur tous les types de variables.

Maintenant regarde par toi-même le lien entre les $i et ton var_dump().


/****************************************************************************/
/*******A ne lire que après avoir vu (ou pas) des trucs**********/
/****************************************************************************/
(pas obligatoire, mais plus pédagogique)


Tu verras que je te fais passer en réalité par ses lignes-là :
"Nom de l'album : Paysage , Catégorie : Monde , Date de création : 15 juin 2014 , Nombre de Photo : 5 , Date de la dernière modification : 16 juin 2014"

à toi à partir de là de les découper, d'abord par les virgules (explode) de les parcourir (foreach) de les couper à nouveau par le : (explode).
Pour relier les "lignes" entre elles, il te reste plus qu'à mettre un compteur ($k par exemple) qui s'incrémentera à chaque tour de foreach.
Et tu possèdes tous les éléments pour te faire un joli tableau de données.

Ce qui permettra par exemple pour récupérer le nombre de photos de parcourir simplement le tableau ainsi :
foreach=$tableau as $k=>$t2)
{
      $nbphoto=$t2['Nombre de photos'];
}


(ainsi que toutes les autres données)

Et tu devrais pouvoir faire un tableau qui ressemblera au mien.
Modifié par Lothindil (16 Jun 2014 - 22:57)
Encore une fois merci pour cette réponse.

j'ai utilisé var_dump pour voir le résultat, je comprends la découpe qui s'y effectue, mais j'ai eu un problème avec le for.

Quand je met :

for($i=3;$i<=$nblignes;$i+2){
echo $i."-";
}


J'obtiens 3-3-3-3 (à l'infini ce qui fait planter mon explorer)

J'ai donc ajouter un break pour obtenir un simple "3-". (Mais je pense que le break pose problème, si j'ai bien compris, il devrait y avoir 3 réponses ici. 3, 5 et 7 )

Si je comprends bien la logique, j'obtiens en réponse le nombre "3" qui correspond a l'explode .( $d1[3] ) pour obtenir la phrase correct. (Pourquoi 3 ? Car j'ai oublier qu'il y avait une ligne d'espace)
non, c'est parce qu'il manque un = dans mon for Smiley biggol


for($i=3;$i<=$nblignes;$i+=2)


C'est $i+=2 pour incrémenter de 2 à la fois XD
Ah en effet, maintenant cela fonctionne Smiley biggrin .

J'ai réussis a identifié ma dernière ligne, je rajoute simplement un :

$nblignes = count($d1);
$maxlignes = $nblignes-1 ;
 if ( $i != maxlignes )


Ainsi il ne traite pas la dernière ligne comme les autres.

Mais je n'arrive pas à isoler le nombre pour les photos. Voici mon codie (sans l'ajout) :

$d1 = explode("\n",$info);
$nblignes = count($d1);

for ($i = 3;$i <= $nblignes;$i+=2){
	$d2 = explode(",",$d1[$i]);

	foreach ($d2 as $t1){
		$d3 = explode(":",$t1); 
	
		foreach($d3 as $k=>$t2)
		{
			$nbphoto=$t2['Nombre de photos'];
		}	
	}
} 

Modifié par Deynox (18 Jun 2014 - 15:25)
Bonjour, je n'ai toujours pas trouver de solutions a mon problème, le soucis dois surement provenir du tableau. Mais je ne comprends pas très bien comment je peux effectué une recherche d'un mot dans un tableau php.
Tu as surtout oublié de construire le tableau ^^

$d3 ressemble à ça à chaque passage :
$d3=array(0=>"cle", 1=>"valeur");


A partir de là, au lieu de parcourir $d3, commence par en faire ton système de données :

$k=0;$tableau=array();
for ($i = 3;$i <= $nblignes;$i+=2){
	$d2 = explode(",",$d1[$i]);
	foreach ($d2 as $t1){
		$d3 = explode(":",$t1); 
	 	$tableau[$k][$d3[0]]=$d3[1];
	}
	$k++;
} 


$tableau ressemblera à ça en gros :
$tableau=array(
0=>array(
	"Nom de l'album"=>"Forêt",
	"Catégorie"=>"Monde",
	"Date de création"=>"15 juin 2014" , 
	"Nombre de Photo"=>"2" , 
	"Date de la dernière modification"=>"16 juin 2014"
),
1=>array(
	"Nom de l'album"=>"Mer",
	"Catégorie"=>"Monde",
	"Date de création"=>"2 juin 2014" , 
	"Nombre de Photo"=>"18" , 
	"Date de la dernière modification"=>"7 juin 2014"
),
2=>array(
	"Nom de l'album"=>"Montagne",
	"Catégorie"=>"France",
	"Date de création"=>"3 mai 2012" , 
	"Nombre de Photo"=>"125" , 
	"Date de la dernière modification"=>"2 avril 2014"
)
);


Comme tu connais les clés (nom des catégories), pas besoin de chercher un mot. Si tu veux par exemple savoir combien il y a d'image au total, toutes catégories confondues, tu feras ça ainsi :

$nbphoto=0;
foreach($tableau as $t)
{
	$nbphoto+=$t['Nombre de Photo'];  
}


Et pour fouiller/trier et autre, tu t'amuses avec les fonctions php dédiés aux tableaux : références array
Modifié par Lothindil (20 Jun 2014 - 12:18)
Je comprend mon erreur, maintenant quand j'utilise "var_dump($tableau);" je vois la composition de celui-ci. Sauf que j'ai un soucis avec cette ligne :

$nbphoto+=$t['Nombre de Photo'];

Quand je l'utilise il me met une erreur :

Notice: Undefined index: Nombre de Photo

Je ne comprends pas pourquoi tout simplement, j'ai même essayer avec un array_search, mais je n'y suis pas parvenu. Sachant qu'il me faut une réponse par ligne. (Je dois récupérer le nombre, pour le stocker dans une variable. )


Edit :

Autant pour moi, l'erreur viens de chez moi, j'ai changer 'Nombre de Photo' par ' Nombre de Photo ' et ça fonctionne. Merci beaucoup pour ton aide.

Je vais essayer maintenant de stocker tout ça dans une base de donnée.
Modifié par Deynox (20 Jun 2014 - 15:24)