begin process at 2012 05 30 20:58:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Divers

 > 

Fonction Implode


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction Implode

mercredi 17 septembre 2008 à 18:40:58 | Fonction Implode

sbach73

Bonjour,

J'ai actuellement un problème que ne n'arrive pas à résoudre.

J'aimerai pouvoir faire une fonction qui m' implode avec plusieurs séparateurs un tableau multidimensionnel.
Est ce possible ?
Si, oui est ce qu' une âme charitable peut me donner une fonction pour.

Merci.

sbach73
mercredi 17 septembre 2008 à 21:54:06 | Re : Fonction Implode

coucou747

Administrateur CodeS-SourceS
salut

je ne comprends pas ce que tu entends par plusieurs separateurs...
jeudi 18 septembre 2008 à 12:32:26 | Re : Fonction Implode

sbach73

Désolé je me suis mal exprimé.

Le mieux, c'est l'exemple :

J'ai un tableau multidimensionnel :


array(5) {
[0]=>array(4) {
[0]=>array(2) {
[0]=>string(3) "rp1"
[1]=>string(3) "200"
}
[1]=>array(2) {
[0]=>string(3) "rp2"
[1]=>string(3) "300"
}
[2]=>array(2) {
[0]=>string(3) "rp3"
[1]=>string(3) "190"
}
}

[1]=>array(4) {
[0]=>array(2) {
[0]=>string(3) "rp1"
[1]=>string(3) "255"
}
[1]=>array(2) {
[0]=>string(3) "rp2"
[1]=>string(3) "150"
}
[2]=>array(2) {
[0]=>string(3) "rp3"
[1]=>string(3) "35"
}
}
}
Je voudrais donc faire une fonction qui utilise la fonction implode pour rassembler le tableau selon le schéma que je vais lui donner.

Exemple de résultat :

rp1-200|rp2-200|rp3-190\n
rp1-255|rp2-150|rp3-35

Le schéma est donc :

array("-", "|","\n") 

( regroupement avec - puis avec | puis avec \n )

Voila j'espère que cet exemple sera plus parlant.



sbach73
vendredi 19 septembre 2008 à 11:47:57 | Re : Fonction Implode

mike1310

ça m'a l'air bien compliqué tous ces tableaux de tableaux ... tu n'as pas essayé de réduire tes tableaux ? Je veux dire par la qu'il y a forcemment moyen de les rassembler en amont.

Comment les obtiens tu ces tableaux ?

Sinon il faudrait imbriqué autant de foreach que tu as de tableaux contenant tes données (donc un truc assez lourd niveau code)..
vendredi 19 septembre 2008 à 14:26:55 | Re : Fonction Implode

mike1310

tiens j'ai trouver un truc intéressant :

function array_implode($arrays, &$target = array()) {
    foreach (
$arrays as $item) {
        if (
is_array($item)) {
           
array_implode($item, $target);
        } else {
           
$target[] = $item;
        }
    }
    return
$target;
}

$a = array('a', 'b', array('c', 'd', array('e'), 'f'), 'g', array('h'));
echo
join(' - ', array_implode($a));

ça renvoi ceci :

a - b - c - d - e - f - g - h

vendredi 19 septembre 2008 à 18:01:43 | Re : Fonction Implode

sbach73

Ma fonction explode me permet de spécifier un schéma d'explosion sur du texte a exploser :

<?php

function explode_recursive($delimiters, $string) {

    if (!is_array($delimiters)) {
        $delimiters = array($delimiters);
    }
  
    $delimiter = array_shift($delimiters);
  
    if (!empty($delimiters))
    {  
        $arExploded = explode($delimiter, $string);
      
        if ($arExploded !== false) {      
            foreach ($arExploded as $key => $value) {
                $arExploded[$key] = explode_recursive($delimiters, $value);
            }
        }
      
        return $arExploded;
    }
    else
    {
        return explode($delimiter, $string);
    }
}

/* Exemple : */
$Text = 'rp1:200-rp2:300-rp3:190-ep:4||1.5|60|\n
                  \n
                  \n
                  4-5-10-14|';
$Delimiteurs = array('\n','|','-',':');

var_dump(explode_recursive($Delimiteurs, $Text));

?>

En fait il faut que je fasse l'inverse de cette fonction.

sbach73
mercredi 24 septembre 2008 à 13:19:52 | Re : Fonction Implode

TASIOT

Réponse acceptée !
Voici la fonction que tu désires tant ! :)

function implodePerso(array $array, array $separateurs, $level = 0){
    $buffer = '';
    $i = 0;
    foreach ($array as $key => $val) {
        if ($i > 0 && array_key_exists($level, $separateurs)){
            $buffer .= $separateurs[$level];
        }
        if (is_array($val)){
            $buffer .= implodePerso($val, $separateurs, $level +1);
        } else {
            $buffer .= $val;
        }
        $i++;
    }
    return $buffer;
}

Exemple d'utilisations :

$tab = array(
    array(
        array('rp1', '200'),
        array('rp2', '300'),
        array('rp3', '190')
    ),
    array(
        array('rp1', '255'),
        array('rp2', '150'),
        array('rp3', '35')
    )
);

echo implodePerso($tab, array("\n", '|', '-'));

Explications :
Le second tableau transmis à ta fonction contient les séparateurs que tu désires appliquer par dimension de ton tableau. Ainsi "\n" sera appliqué 2 fois, "|" 3 fois et "-" 2 fois.

Si tu as des questions n'hésite pas !

PS: Le dernier argument de la fonction ($level) est utilisé en récursivité par la fonction elle-même. Il t'est inutile de le transmettre lors de l'appel de la fonction.

Roland Dufour,
http://www.multiprog.net
http://portfolio.multiprog.net
mercredi 24 septembre 2008 à 15:18:40 | Re : Fonction Implode

sbach73

Merci infiniment de ce script cela va me faire gagner du temps.

sbach73
mercredi 24 septembre 2008 à 16:34:10 | Re : Fonction Implode

TASIOT

Mais de rien, ce fut un plaisir de me casser la tête sur ton script durant une dizaines de minutes :). Tu noteras que si le séparateur du niveau de ton tableau n'existe pas (exemple : tu rajoutes une dimension à ton tableau sans modifier le tableau des séparateurs, aucun séparateur ne sera appliqué pour ce niveau.
Tu pourrais palier à ce problème en définissant un séparateur par défaut dans ta fonction genre :
if ($i > 0 && array_key_exists($level, $separateurs)){
     $buffer .= $separateurs[$level];
} elseif ($i > 0){
     $buffer .= ':'; // <= ton séparateur par défaut
}

De même, si tu ne veux pas appliquer de séparateur sur les premiers niveaux, envoie simplement une chaine vide en tant que séparateur :
echo implodePerso($tab, array('', '|', '-')); // Aucun séparateur sur le 1er niveau

Roland Dufour,
http://www.multiprog.net
http://portfolio.multiprog.net


Cette discussion est classée dans : fonction, implode


Répondre à ce message

Sujets en rapport avec ce message

PB implode Explode [ par Jey101 ] je souhaite enregistrer differentes valeurs dans un champ de base de données, pour cela je voudrais utiliser une fonction implode(). le truc est que j préchargement d'images [ par putch ] voial j'ai un souci avec une fonction que je souhaite réaliser.Celle-ci doit précharger dans le navigateur toutes les images d'un répertoire.function fonction perso dans requete SQL [ par martiall ] Salut à toutes et tous,Totalement débutant en PHP et mysql, j'ai l'habitude d'utiliser access. D'ou mon problème :disons que j'ai une fonction astro($ Droit d'accès à un répertoire en fonction de l'heure [ par jack ] Bonjour à tousC'est mon premier post en dehors de vbfrance, soyez indulgents, je connais pas grand chose au php !La question : Est-il pensable de modi preview d'un formulaire [ par netwebzone ] Bonjour,Je ne sais pas si je suis dans le bon forum, parce que j'utilise PHP et javascript et je ne sais pas ou est vraiment le problème... je m'expli MAJ tableau en fonction de la valeur d'une liste déroulante [ par Gagou_c ] Bonjour,Je voudrais afficher des informations dans un tableau, en fonction de la valeur d'une liste déroulante.Il faudrait que je mette à jour la page Redirection chez FREE [ par lolorenzeb ] Bonjour à tous,voila j'ai héberger mon site chez free mais j'ai des problèmes avec une fonction de redirection.j'utilise cette fonction et en local ca Déclaration variable [ par Gagou_c ] Bonjour, J'utilise une fonction JavaScript dans une page php.J'apelle ma fonction :onChange=Lien($profil)et ma fonction est kome ça :function Lien($pr compression de bmp [ par thunderfear ] bonjour, J'aimerai compresser des images bmp. J'ai fait le même avec des jpg mais je me sert de la fonction imagejpg(). La fonction imagebmp() n'exist Récuperer un texte entre deux balises spécifiques [ par yvain91 ] Bonjour j'aurai besoin de récupérer du texte dans un fichier que j'ai ouvert avec la fonction fopen. Ce texte se trouve entre deux balises facilement


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales