Rechercher : dans
Par :

Itérateurs et classes (PHP5)

Dernière réponse le 29 mar 2009 à 11:51:55 sebshiva, le 26 mar 2009 à 15:58:23 
 Signaler ce message aux modérateurs

Bonjour,

J'essaie d'apprendre à manipuler les itérateurs en parallèle de mon entrée dans le monde merveilleux de la POO en PHP5...
Je vois ceci chez wikipedia "Le plus souvent l'itérateur est conçu en même temps que la classe-conteneur qu'il devra parcourir, et ce sera le conteneur lui-même qui créera et distribuera les itérateurs pour accéder à ses éléments", et il se trouve que c'est ce que j'essaie de faire mais sans succès depuis deux jours maintenant et là... je craque...
Je ne vais pas balancer du code tout de suite mais si quelqu'un se sent de m'expliquer... il ferais de moi un homme heureux ;)
Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Configuration: Linux
Firefox 3.0.7

Meilleures réponses pour « Itérateurs et classes (PHP5) » dans :
PHP - Les classes Voir La notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Le mot-clé static ou les attributs et méthodes de classe en POO Voir(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore,...
Décalage des sous-titres avec Media Player Classic VoirProblème Je possède une vidéo au format .AVI, ainsi qu'un fichier de sous-titres au format .SUB, malheureusement lors de la lecture avec Media Player Classic, les sous-titres sont décalés par rapport à la vidéo. Solution Il existe le logiciel...
Télécharger Media Player Classic HomeCinema VoirMedia Player Classic - Home Cinema est une version modifiée de Media Player Classic. Elle reprend ce qui a fait le succès de l’original et y ajoute quelques nouveautés. Cette version inclut des décodeurs supplémentaires HD pour les codecs H.264 et VC...
Les classes de style (CSS) VoirLes classes et les ID Les classes Il peut s'avérer intéressant d'affecter des styles différents à des mêmes balises. Pour cela les spécifications CSS ont introduit le concept de classe. La définition des classes est aussi simple que celles des...
Classe et instance d'objet VoirLa notion de classe On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule. En réalité on dit qu'un...
.NET - Les classes de bases VoirLes classes de la librairie objet La librairie objet du Framework Microsoft .NET (Framework Classes Library) est un ensemble de classes unifié et hiérarchisé offrant un grand nombre de fonctionnalités standard. La FCL permet ainsi d'utiliser un...

1

sebshiva, le 26 mar 2009 à 23:32:31

Up! Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva

2

sebshiva, le 27 mar 2009 à 13:25:00

Up! Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva

3

sebshiva, le 27 mar 2009 à 22:37:38

Up! Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva

4

sebshiva, le 28 mar 2009 à 12:27:55

Bon, je balance un peu de code et quelques var_dump... defois que ça inspire...
Voila, j'essaie de mettre en place une classe de recherche de fichier ou de contenu de fichier.
voici comment je procède:
1 classe abstraite qui liste récursivement le répertoire visé:

<?php
abstract class RecursiveReadDir {

	public $PathArray=array();
	private $a=0;
	public function PathList($dir) {
		
		if (!is_dir($dir)) { 
			throw new MyException ($dir.' n\'est pas un repertoire valide');
		}
		$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
		$it->next();
		while($it->valid()) {
			$this->PathArray[$this->a]['Path']=$it->getPath();
			$this->PathArray[$this->a]['FileName']=$it->getFilename();
			$this->a++;	
    			$it->next();
		}
		return $this->PathArray;	
	}
}
?>

var_dump de sortie (et donc ce que récupère la classe suivante):

array(7) {
  [0]=>
  array(2) {
    ["Path"]=>
    string(10) "martien/js"
    ["FileName"]=>
    string(5) "js.js"
  }
  [1]=>
  array(2) {
    ["Path"]=>
    string(12) "martien/test"
    ["FileName"]=>
    string(9) "test.txt~"
  }
  [2]=>
  array(2) {
    ["Path"]=>
    string(12) "martien/test"
    ["FileName"]=>
    string(8) "test.txt"
  }
  [3]=>
  array(2) {
    ["Path"]=>
    string(7) "martien"
    ["FileName"]=>
    string(9) "index.php"
  }
  [4]=>
  array(2) {
    ["Path"]=>
    string(16) "martien/requests"
    ["FileName"]=>
    string(11) "cherche.php"
  }
  [5]=>
  array(2) {
    ["Path"]=>
    string(11) "martien/cls"
    ["FileName"]=>
    string(15) "styles_gepo.css"
  }
  [6]=>
  array(2) {
    ["Path"]=>
    string(11) "martien/cls"
    ["FileName"]=>
    string(17) "buildform.cls.php"
  }
}




viens ensuite la fameuse classe de recherche

<?php
class SearchStringOrName extends RecursiveReadDir {

	public $FindArray=array();
	public $FindResult=array();
	public $FileNameSearch;
	protected $NbFind=0;
	public function __construct($Recherche,$TypeFind,$Dir) {
		if ((empty($Recherche))||(empty($TypeFind))||(empty($Dir)))
		throw new MyException ('param&egrave;tre manquant');
	}
	public function searchStrOrName($Recherche,$TypeFind,$Dir) {
		$this->FindArray = parent::PathList($Dir);
		$ar = new ArrayObject($this->FindArray);
		$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($ar));
		while($it->valid()) {
			if ($TypeFind==='FileName') {
echo $it->key() . ' => ' . $it->current() . ' => '.$it->getDepth ().'<br/>';
				if ((strpos($it->current(),$Recherche))&&($it->key()==='FileName')) {
					$this->FindResult[$this->NbFind][$it->key()]=$it->current();
					$it->next();
					$this->FindResult[$this->NbFind][$it->key()]=$it->current();
				}
			}
			if ($TypeFind==='FileContent') {	
				$ContFile=file_get_contents(settype($it->current(),'string'));
				if(ereg("$Recherche(.{0,40})",$ContFile,$sortie)) {
					$this->FindResult[$this->NbFind][$it->key()]=$sortie[0];
					$this->FindResult[$this->NbFind][$it->key()]=$it->current();
				}
			}
		$this->NbFind++;
		$it->next();
		}
		return($this->FindResult);
	}
}

?>

mon soucis, c'est qu'au moment des comparaisons (je ne me concentre pour l'instant que des nom de fichier)
mon itérateur me renvoi
0 => Array
Path => martien/js
FileName => js.js
Path => martien/test
FileName => test.txt~
Path => martien/test
FileName => test.txt
Path => martien
FileName => index.php
Path => martien/requests
FileName => cherche.php
Path => martien/cls
FileName => styles_gepo.css
Path => martien/cls
FileName => buildform.cls.php

c'est très bien, mais je veux comparer les nom de fichier et conserver le PATH... j'espère que vous comprenez mon problème (le code me parait parlant)....
Merci de m'éclairer avant que je trouve une corde... Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva

5

sebshiva, le 28 mar 2009 à 12:32:13

'tain, la mise en page est dégeu...
je remet la seconde classe en réduisant l'indentation

<?php
class SearchStringOrName extends RecursiveReadDir {

public $FindArray=array();
public $FindResult=array();
public $FileNameSearch;
protected $NbFind=0;
public function __construct($Recherche,$TypeFind,$Dir) {
if ((empty($Recherche))||(empty($TypeFind))||(empty($Dir)))
throw new MyException ('paramètre manquant');
}
public function searchStrOrName($Recherche,$TypeFind,$Dir) {
$this->FindArray = parent::PathList($Dir);
$ar = new ArrayObject($this->FindArray);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($ar));
while($it->valid()) {
if ($TypeFind==='FileName') {
echo $it->key() . ' => ' . $it->current() . ' => '.$it->getDepth ().'<br/>';
if ((strpos($it->current(),$Recherche))&&($it->key()==='FileName')) {
$this->FindResult[$this->NbFind][$it->key()]=$it->current();
$it->next();
$this->FindResult[$this->NbFind][$it->key()]=$it->current();
}
}
if ($TypeFind==='FileContent') {
$ContFile=file_get_contents(settype($it->current(),'string'));
if(ereg("$Recherche(.{0,40})",$ContFile,$sortie)) {
$this->FindResult[$this->NbFind][$it->key()]=$sortie[0];
$this->FindResult[$this->NbFind][$it->key()]=$it->current();
}
}
$this->NbFind++;
$it->next();
}
return($this->FindResult);
}
}
?> Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva

6

 sebshiva, le 29 mar 2009 à 11:51:55

Personne pour m'aider? Linux - Ubuntu 8.04 - FireFox 3.0.7
~~(-_-)~~

Répondre à sebshiva