Array_Splice, besoin d'éclaircissement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Array_Splice, besoin d'éclaircissement

Re: Array_Splice, besoin d'éclaircissement

par Stef » 26 avr. 2010, 13:34

par contre si y'a pas d'espace ca va pas le faire par exemple :

Code : Tout sélectionner

le test,à toto

C'est pour un moteur de recherche, donc l'utilisateur se rendra compte que y a un shmol dans sa requête...

Re: Array_Splice, besoin d'éclaircissement

par stealth35 » 26 avr. 2010, 13:25

par contre si y'a pas d'espace ca va pas le faire par exemple :

Code : Tout sélectionner

le test,à toto

Re: Array_Splice, besoin d'éclaircissement

par Stef » 26 avr. 2010, 13:24

Donc ça serait encore plus simple avec array_diff?

Une fonction de plus dans mon arsenal...

Merci beaucoup pour les infos et tes réponses! : )

Re: Array_Splice, besoin d'éclaircissement

par macgawel » 26 avr. 2010, 12:40

Effectivement les infos du manuel sont assez claires... mais tu parles à un débutant qui même s'il lit le manuel ne comprend ou n'assimile pas forcément toutes les infos; c'est pourquoi des questions peuvent se poser afin de chercher à mieux comprendre.
C'est bien pour ça que j'ai pris la peine de citer la partie intéressante du manuel :wink:

... Sinon, tu as regardé la fonction array_diff ?
array_diff() compare le tableau array1 avec le tableau array2 et retourne la différence.
$seek = 'le test à toto';  // Chaine à nettoyer
$tabl = explode(' ', $seek);
$unvalidwords = array ('le', 'la', 'les', 'au', 'aux', 'et', 'ou', 'où', 'en', 'à', 'du', 'des', 'mais', 'donc', 'or', 'ni', 'ne', 'car', 'qui', 'que', 'quoi');
$result = array_diff($tabl, $unvalidwords);
$result te retourne le tableau $tabl débarassé de tous les éléments du tableau $unvalidwords =D>

Re: Array_Splice, besoin d'éclaircissement

par Stef » 26 avr. 2010, 12:18

Merci pour ta réponse!

Effectivement les infos du manuel sont assez claires... mais tu parles à un débutant qui même s'il lit le manuel ne comprend ou n'assimile pas forcément toutes les infos; c'est pourquoi des questions peuvent se poser afin de chercher à mieux comprendre.

Cependant j'ai dû ruser pour simplifier mon code et arriver à mon but: j'ai simplement créé un nouveau tableau ne contenant que les mots autorisés...
$seek = strip_tags(mysql_real_escape_string($_POST['seeked']));
$tabl = explode(' ', $seek);
						
$unvalidwords = array ('le', 'la', 'les', 'au', 'aux', 'et', 'ou', 'où', 'en', 'à', 'du', 'des', 'mais', 'donc', 'or', 'ni', 'ne', 'car', 'qui', 'que', 'quoi');
						
foreach ($tabl as $w2cl) {
							
	$w2cl = trim($w2cl);
							
	if (!in_array($w2cl, $unvalidwords)) {
								
		$ntabl[] = $w2cl;
								
	}
							
}

Re: Array_Splice, besoin d'éclaircissement

par macgawel » 26 avr. 2010, 12:05

Bonjour.

1. Pour array_splice, RTFM :
Si length est donné et positif, alors la série aura autant d'éléments. Si length est donné et négatif, les éléments seront pris dans l'ordre inverse. Si length est omis, la séquence lira tous les éléments du tableau, depuis l'offset offset jusqu'à la fin du tableau.
Il faut lui passer en paramètre une taille de 1 (élément).

2. Pour ton code de départ :
Il va y avoir un problème, une fois corrigé la fonction array_splice.
En fait, la boucle foreach opère sur une copie du tableau spécifié et non sur le tableau lui-même.
Par contre, array_splice opère sur le tableau lui-même.

1. foreach génère un tableau "copie" de $tabl qui contient (0 => 'le', 1 => 'test', 2 => 'à', 3 => 'toto')
2. Pour chacun de ces 4 éléments on va tester s'il y a besoin de faire un array_splice :
Tour 1 'le' est dans la liste, donc on fait array_splice ($tabl, 0, 1)
$tabl = ('test', 'à', 'toto')
Tour 2 : 'test' n'est pas dans la liste.
Tour 3 : 'à' est dans la liste, donc on fait array_splice ($tabl, 2, 1)
$tabl = ('test', 'à') (vu qu'on suprime $tabl[2])

Sinon, vu ce que tu veux faire tu devrais jeter un coup d'oeil sur array_diff()...

Re: Array_Splice, besoin d'éclaircissement

par Stef » 26 avr. 2010, 11:46

Résolu en remplaçant array_splice($tabl, $kv); par ceci:

unset($tabl[array_search($w2cl, $tabl)]);


Par contre j'aimerais bien comprendre ce qui n'allait pas dans mon tuilisation de array_splice....

Array_Splice, besoin d'éclaircissement

par Stef » 26 avr. 2010, 11:39

Hellohooo : )

Je dois traiter une chaine de caractère provenant d'un formulaire afin d'en retirer certains mots, j'utilise array_splice mais le résultat n'est pas bon; voici ce que j'ai fait:
<?php
$seek = 'le test à toto';  // Chaine à nettoyer
$tabl = explode(' ', $seek);
$nbw = count($tabl);
						
$unvalidwords = array ('le', 'la', 'les', 'au', 'aux', 'et', 'ou', 'où', 'en', 'à', 'du', 'des', 'mais', 'donc', 'or', 'ni', 'ne', 'car', 'qui', 'que', 'quoi');
						
foreach ($tabl as $kv => $w2cl) {
							
	$w2cl = trim($w2cl);
							
	if (in_array($w2cl, $unvalidwords)) {
								
		array_splice($tabl, $kv);
								
	}
							
}

echo '<pre>';
print_r($tabl);
echo '</pre>';
?>
Ce qui me donne:

Array
(
)

Mon tableau ne devrait contenir que "test" et "toto" à ce point, mais là il a été entièrement vidé...

Il y a un truc qui m'échappe sur cette fonction! Vraisemblablement je l'utilise mal... Comment donc obtenir l'effet escompté?

Merci bien par avance! : )