Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/04/2011, 17h12   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Par défaut Supprimer élément d'un tableau

Bonjour à tous,

J'ai un tableau $tab composé de phrases diverses. (récupéré après un $tab=file($path.$file))

Je souhaiterai supprimer les éléments de ce tableau qui contiennent la chaine 'toto' (par exemple).

J'arrive bien à supprimer l'élément du tableau qui a pour valeur 'toto' mais pas l'élément qui a pour valeur 'toto test titi'

Merci pour votre aide.

CC
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 20h06   #2
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Bonsoir,

On pourrait avoir un bout de code ?

Merci et bonne soirée,
Alexis
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 20h34   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Tu pourrais, avec array_walk, mettre la valeur nulle pour chaque élément du tableau contenant "toto" puis ensuite supprimer les éléments vides du tableau
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$tab = array('titi','toto tata','tutu','toto');
 
function test_alter(&$item1, $key, $prefix)
{
    $item1 = strpos($item1,$prefix) !== false ? null : $item1;
}
 
 
array_walk($tab, 'test_alter', 'toto');
 
$tab = array_filter($tab);//supprime les éléments null ou vide ou false
 
$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
 
print_r($tab);
sinon faire une boucle basique en créant un tableau de résultat

Code :
1
2
3
4
5
6
7
8
$tab = array('titi','toto tata','tutu','toto');
$tab_result = array();
$sup = 'toto';
 
foreach($tab as $key =>$value)
if(strpos($value,$sup) === false) $tab_result[$key] = $value;
 
print_r($tab_result);
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 22h47   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Merci pour vos réponses.
Je teste tout ca et vous tiens informé.

Merci encore.

CC
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 23h09   #5
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Le seul truc de cette solution c'est que si tu as un élément de tableau sous la forme "azetototy", ça va le supprimer également. Si tu ne le souhaites pas on avisera
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 23h46   #6
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
je ne devrai pas entrer dans ce cas la.
Merci pour cette précision.

CC
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 04h50   #7
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
En cas de besoin et comme ce n'est pas compliqué je te donne une solution pour cette option :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$tab = array('titi','toto tata','tutu','toto','azetototy');
 
function test_alter(&$item, $key, $prefix)
{
    $tab_mots = explode(' ',$item);
    $item = in_array($prefix,$tab_mots)? null : $item;
}
 
$sup = 'toto';
array_walk($tab, 'test_alter', $sup);
 
$tab = array_filter($tab);//supprime les éléments null ou vide ou false
 
$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
 
echo '<pre>';
print_r($tab);
echo '</pre>';
Dans ce cas il faut que "toto" soit isolé par un (ou deux) espaces pour supprimer l'élément du tableau.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 11h02   #8
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Super Merci, ca fonctionne correctement.

J'ai utilisé le code suivant que j'ai inséré dans une boucle foreach pour supprimer du tableau initial ($tab) plusieurs valeurs.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
function test_alter(&$item, $key, $prefix)
{
    $tab_mots = explode(' ',$item);
    $item = in_array($prefix,$tab_mots)? null : $item;
}
 
 
$sup = array('GUI','SECURE');
 
 
foreach($sup as $value)	
{
		array_walk($tab, 'test_alter', $value);
		$tab = array_filter($tab);//supprime les éléments null ou vide ou false
		$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
}
En revanche, dans les valeurs a supprimer, je souhaiterai ajouter les lignes vides. (pour rappel, le tableau $tab est le resultat d'un parse de fichier, dans ce fichier certaines lignes sont vides, et je ne souhaiterai pas qu'elles soient prises en compte)

Pour info, lorsque je fais un VI de ce fichier, je vois dans mon terminal le caractère suivant : ^M

J'ai testé avec :
Code php :
1
2
$sup = array('GUI','SECURE','\n');
$sup = array('GUI','SECURE','\r');
Mais ca ne fonctionne pas.

Merci,


CC
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 17h18   #9
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Citation:
Envoyé par cougar5 Voir le message
J'ai testé avec :
$sup = array('GUI','SECURE','\n');
$sup = array('GUI','SECURE','\r');
Mais ca ne fonctionne pas.

Merci,


CC
Pour info, pour que \n et \r soient recherchés comme des retours lignes il faut les mettre entre doubles quotes : "\n" ou "\r"

Cela dit ce n'est pas la bonne solution pour ton problème.
Il suffit juste d'utiliser les options quand tu utilises la fonction file()
Soit :

Code :
$tab = file('somefile.txt', FILE_SKIP_EMPTY_LINES);
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 17h37   #10
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
... de plus pour supprimer plusieurs valeurs tu pourrais faire ceci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyo');
 
function test_alter(&$item, $key, $prefix)
{
    $tab_mots = explode(' ',$item);
    foreach ($prefix as $value) if(in_array($value,$tab_mots)) $item = null;
}
 
$sup = array('toto','tata');
array_walk($tab, 'test_alter', $sup);
 
$tab = array_filter($tab);//supprime les éléments null ou vide ou false
 
$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
 
echo '<pre>';
print_r($tab);
echo '</pre>';
?>
ça sera plus optimisé puisque ton tableau ne sera lu qu'une fois quelque soit le nombre de valeurs à supprimer.

Et pour garder cette même syntaxe et si besoin ne supprimer qu'une valeur il te suffit de faire un tableau à un élément pour la suppression ex: $sup = array('toto');
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 13h52   #11
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Tout fonctionne parfaitement.
GRAND GRAND merci à vous !!!
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 19h09   #12
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
AIE !!
J'ai utilisé ton code ci dessus, et je viens de m'apercevoir que si $sup=('titi toto','tutu tata'); c'est a dire avec des espaces, ca ne fonctionne pas
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 22h58   #13
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Et comme ça ?

Code :
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
<?php
$tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyototo','titi tutu tata');
 
function test_alter(&$item, $key, $prefix)
{
    $prefix = array_map('trim',$prefix);
 
    foreach ($prefix as $value)
	{ 
		$prefix_ = str_replace(' ', '_', $value);
		$item_ = str_replace($value, $prefix_, $item);
 
		$tab_mots = explode(' ',$item_);
		if(in_array($prefix_,$tab_mots)) $item = null;
	}
 
}
 
$sup = array('titi tutu','titi','tata yoyo','toto');
 
array_walk($tab, 'test_alter', $sup);
$tab = array_filter($tab);//supprime les éléments null ou vide ou false
$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
 
echo '<pre>';
print_r($tab);
echo '</pre>';
?>
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 11h08   #14
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Ca fonctionne bien après la suppression de la ligne suivante dans le code :
Code :
1
2
 
$prefix = array_map('trim',$prefix);
Merci beaucoup pour tous les bouts de code !! et surtout pour ton aide.
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 17h08   #15
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Oui cette ligne était une option pour supprimer les espaces de début et de fin dans les motifs des lignes à supprimer... en supposant qu'ils aient été là par erreur. Mais si tu veux en tenir compte, cette ligne est effectivement à supprimer.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 17h36   #16
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Je viens de voir qu'on peut statistiquement améliorer un peu les performances d'autant plus que tu auras de nombreux motifs de suppression. Il suffit pour cela de sortir de la boucle une fois le premier motif trouvé, soit :

Code :
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
$tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyototo','titi tutu tata');
 
$sup = array('titi tutu','tata yoyo','toto');
 
 
function test_alter(&$item, $key, $prefix)
{	    
    foreach ($prefix as $value)
	{ 
		$prefix_ = str_replace(' ', '_', $value);
		$item_ = str_replace($value, $prefix_, $item);
 
		$tab_mots = explode(' ',$item_);
 
		if(in_array($prefix_,$tab_mots)) 
		{ 
			$item = null;
			break;
		}
	}
 
}
 
 
array_walk($tab, 'test_alter', $sup);
$tab = array_filter($tab);//supprime les éléments null ou vide ou false
$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
 
echo '<pre>';
print_r($tab);
echo '</pre>';
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 22h36   #17
Invité de passage
 
Inscription : novembre 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 21
Points : 2
Points : 2
Merci ABCIWEB, je testerai à la rentrée !!
cougar5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h23.


 
 
 
 
Partenaires

Hébergement Web