Mammouth du PHP |
19672 Messages
20 nov. 2006, 10:38
Salut, oui, c'est possible avec une utilisation de explode(). Plutôt qu'un discours, voici une proposition de code, il est commenté, tu devrais t'y retrouver. J'ai repris ton exemple pour créer un fichier que j'ai mis à coté du fichier de traitement :
<?php
/* Fichier source */
$fichier = "./fichier.txt";
/* Délimiteurs */
$debut_2 = "*+++*";
$fin_1 = "*===*";
$md1 = "#\*\#{3}\*#";
$md2 = "#\*\+{3}\*#";
$mf1 = "#\*={3}\*#";
$mf2 = "#\*@{3}\*#";
/* Creation du tableau final */
$tableau = array();
/* Récupération du contenu du fichier */
$contenu = file_get_contents($fichier);
/* Mise en tableau du premier niveau */
$niveau_1 = explode($fin_1, $contenu);
/* Traitement du premier niveau : on supprime le délimiteur de fin */
$nb1 = count($niveau_1);
for($i = 0; $i < $nb1; $i++)
{
/* Pour chaque occurence trouvée, on supprime le délimiteur de début et les espaces
inutiles de début et de fin (incluant les retours de chariot) */
$niveau_1[$i] = trim(preg_replace($md1, "", $niveau_1[$i]));
/* On teste si il existe des sous-chaines dans l'occurence en cours */
if(preg_match($md2, $niveau_1[$i]))
{
/* Mise en tableau du second niveau */
$niveau_2 = explode($debut_2, $niveau_1[$i]);
$nb2 = count($niveau_2);
if($nb2 > 1)
{
for($j = 0; $j < $nb2; $j++)
{
$val = trim(preg_replace($mf2, "", $niveau_2[$j]));
if(!empty($val))
{
$tableau[$i][$j] = $val;
}
}
}
}
else
{
if(!empty($niveau_1[$i]))
{
$tableau[$i][0] = $niveau_1[$i];
}
}
}
echo("<pre>\n");
var_dump($tableau);
echo("</pre>\n");
?>
Et l'exécution de ça me donne comme affichage :
Code : Tout sélectionner
array(3) {
[0]=>
array(1) {
[0]=>
string(115) "PHPFrance est maintenu par des bénévoles et soutenu par les sociétés Actoo et Anaska, Conseil et Formation pour PHP"
}
[1]=>
array(1) {
[0]=>
string(146) "Pour optimiser vos chances commencez par consulter la FAQ et faites une recherche.
Bon esprit, politesse et entraide sont les règles de ce forum."
}
[2]=>
array(2) {
[0]=>
string(150) "Trouve au salon Inter BEE de Tokyo: le premier ecran plat "Super Hi-Vision", aavec une resolution quatre fois superieure a celle du Full HD actuel..."
[1]=>
string(106) "Il est très difficile de pénétrer aujourd’hui dans les locaux de l’ancienne ambassade américaine à Téhéran"
}
}
Comme tu peux voir, un tableau à deux dimensions.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse 