[PHP] pb sur array

Résolu/Fermé
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 - 15 juin 2009 à 12:43
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 - 15 juin 2009 à 13:27
Bonjour,
j'essaie de recuperé les informations imap, contenu dans "imap_fletchstructure()" afin de pouvoir decortiqué les infos et ainsi n'afficher que ce que je souhaite.
Par exemple, j'ai un mail contenant plusieurs partie (MULTIPART) celui-ci a du texte et du html plus un fichier joint.
Pour l'heure je me fiche du fichier joint seul m'importe d'afficher le mail.
Le probleme c'est que "imap_fletchstructure() " renvoi un espece de tableau bien embetant.
En effet le tableau contient une suite de tableau imbriqué les uns dans les autres qu'il est super dur de parcourir pour trouvé l'info voulu.
Alors faute de trouver le truc ideal j'ai bricolé le code ci-dessous, me permettant, de me connecter a ma boite, de compter le nombre de partie du mail puis d'en sortir un indexage de chaque partie afin de pouvoir le reutilisé plus tard via "imap_fletchbody()"


$MaBox = imap_open("{".$imap_server.":110/pop3}", $imap_user, $imap_pass); //ma connexion

$MessNum = $IDMESS; //numero du mail envoyé par url pour test

$StructureInfos = imap_fetchstructure($MaBox, $MessNum); // la structure du mail recuperé via son n°

$NbParts = count($StructureInfos->parts); //Nbre de partie du mail ex :1, 2, etc....

//*****************
// fonction qui me permet de connaitre les N° de parties du mail

function mime_scan_multipart(&$parts, $part_number)
{
$n = 1;
foreach ($parts as $obj) {
if ($obj->type == 1)
mime_scan_multipart($obj->parts, "$part_number$n.");
else
echo "$part_number$n\n";
$n++;
}
}

function mime_scan(&$obj)
{
if ($obj->type == 1)
mime_scan_multipart($obj->parts, "");
else
echo "1";
}

$TabNom = mime_scan($StructureInfos);

//*****************
// fonction qui met le resultat de imap_fletchstructure dans un tableau pour trouver ce que je cherche

function create_part_array($structure, $prefix="") {
//print_r($structure);
if (sizeof($structure->parts) > 0) { // plusieurs parties
foreach ($structure->parts as $count => $part) {
add_part_to_array($part, $prefix.($count+1), $part_array);
}}else{
$part_array[] = array('part_number' => $prefix.'1', 'part_object' => $obj);
}
return $part_array;
}
// Sub fonction appelé uniquement via creat_part_array
function add_part_to_array($obj, $partno, & $part_array) {
$part_array[] = array('part_number' => $partno, 'part_object' => $obj);
if ($obj->type == 2) { // verif au cas ou message en RFC-822
//print_r($obj);
if (sizeof($obj->parts) > 0) {
foreach ($obj->parts as $count => $part) {

if (sizeof($part->parts) > 0) {
foreach ($part->parts as $count2 => $part2) {
add_part_to_array($part2, $partno.".".($count2+1), $part_array);
}}else{
$part_array[] = array('part_number' => $partno.'.'.($count+1), 'part_object' => $obj);
}}}else{
$part_array[] = array('part_number' => $prefix.'.1', 'part_object' => $obj);
}}else{
if (sizeof($obj->parts) > 0) {
foreach ($obj->parts as $count => $p) {
add_part_to_array($p, $partno.".".($count+1), $part_array);
}}}}

//***************
// je recupere le resultat de la fonction
$RecupPartArray = create_part_array($StructureInfos);

// bon alors la c'est le bazar
//Une fois la moulinette sur les parties faite, je souhaite pouvoir recuperé les variables qui m'interresse et les mettres dans un petit tableau qui comportera que
//les infos dont j'ai besoin a savoir, le N° de partie, le format du mail (html, RFC ou texte) et le codage.


foreach ($RecupPartArray as $Key1Rang=>$Valeur1Rang) {//x

$Board1Rang[$Key1Rang] = $Valeur1Rang;
//print_r($Board1Rang[$Key1Rang]);

$RecupNumPart = $Board1Rang[$Key1Rang]['part_number']; //N° des differentes parties du mail
echo "(".$RecupNumPart.")";

};//x

Voila donc mon soucis, car le tableau retourné via "$RecupPartArray" contient un autre tableau qui contient un autre tableau etc....
Et la pour recuperé les variables correspondante a 'subtype' ou 'encoding' ou d'autres impossible a chaque fois il ne me trouve rien.
j'ai essayé en remettant une couche de foreach dans le precedent mais rien....
Bref si quelqu'un a une idée ca serait bien zen.
Merci
A voir également:

1 réponse

underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
15 juin 2009 à 13:27
Bon et bien j'ai trouvé je vous met la suite si cela peu aider quelqu'un
c'est juste qu'il faut bien ce balader dans le tableau... alalallalaa les joies de php

$o=0;

foreach ($RecupPartArray as $Key1Rang=>$Valeur1Rang) {//x

$Board1Rang[$Key1Rang] = $Valeur1Rang;

$RecupNumPart = $Board1Rang[$Key1Rang]['part_number'];
$RecupsubPart = $Board1Rang[$Key1Rang]['part_object']->subtype;
$RecupencodePart = $Board1Rang[$Key1Rang]['part_object']->encoding;

$BoardRecup[$o] = array('Num'=>$RecupNumPart,'Sub'=>$RecupsubPart,'Enc'=>$RecupencodePart);

$o++;
};//x


print_r($BoardRecup);
0