Traitement array pour afficher des données en chaîne de caractère

Par FactureHero.com, il y a 11 ans


Voici ce que j'ai : Un array qui contient un User avec un champ mail

array( (int) 0 => array( 'User' => array( 'mail' => 'mail1@gmail.com', ) ), (int) 1 => array( 'User' => array( 'mail' => 'mail2@gmail.com', ) ) )

Voilà ce que j'aimerai récupérer : une chaîne de caractère contenant les emails entourés de simple quote et séparé par une virgule :

$mavariable = " 'mail1@gmail.com', 'mail2@gmail.com' "

J'ai tenté avec un foreach mais je n'y suis pas parvenu puisque ça traite chaque données séparémment dans le foreach.

QQ a-t-il une idée du traitement PHP à appliquer sur l'array pour obtenir cette chaîne de caractère ?

thanks

12 réponses

TransientDev, il y a 11 ans

Bonjour,

$var = []; foreach($tableau as $k => $v) { $var[] = $v['User']['mail']; } $mavariable = implode(', ', $var);

je pense que ceci devrait fonctionner

FactureHero.com, il y a 11 ans

C'est tout à fait ça merci beaucoup TransientDev !
faut vraiment que je bosse le maniement des array moi :)
Dernière manip qui me pose problème
J'aimerai transformer mon 1er array en cette forme là, avec les simple quotes et chaque entrée séparée par la virgule :

array(
'mail1@gmail.com',
'mail2@gmail.com',
);

Je viens de tenter d'insérer ta solution dans un array, mais évidemment ça me met une clé numérotée que je ne veux pas :) :

array( (int) 0 => ''mail1@gmail.com', 'mail2@laposte.net'' )

Il faut que je supprime cette clé "(int) 0 =>"
Je sollicite donc à nouveau tes lumières sur le maniement des array :)

TransientDev, il y a 11 ans

Je ne suis pas sur d'avoir saisi, mais en changeant cette ligne

$var[] = $v['User']['mail'];

en

$var[] = '\'' . $v['User']['mail'] . '\'';

$var vous donnera un resultat de ce genre

array( (int) 0 => 'mail1@gmail.com', (int) 1 => 'mail2@gmail.com', );

si vous voulez modifier la clé, il suffit de faire

foreach($tableau as $k => $v) { $var['mail ' . $k] = $v['User']['mail']; }

par exemple. ($tableau est votre premier tableau).
J'espère avoir compris ^^ sinon n'hesitez pas à mieux m'expliquer (je suis un peu fatigué donc c'est dur pour moi :3 )

FactureHero.com, il y a 11 ans

Même fatigué, largement meilleur que moi en forme :) Comme quoi ça sert de s'entraîner à manipuler les tableaux. Un point qui freine régulièrement mon temps de Dev. Faut vraiment que je m'y mette :)

Pour ma dernière demande en fait je cherche à supprimer totalement la clé du tableau associatif, en clair,
passer de ça :

array( (int) 0 => ''mail1@gmail.com'', (int) 1 => ''mail2@gmail.com'', )

à ça :

array('mail1@gmail.com', 'mail2@gmail.com')
TransientDev, il y a 11 ans

Je ne pense pas que ce soit possible, par exemple si tu essai de faire

var_dump(array(1,2,3));die();

tu obtiendras

array (size=3) 0 => int 1 1 => int 2 2 => int 3

le mieux que tu puisse faire c'est attribuer une clé a chaque valeur.
Dans les autres langages ainsi qu'en algorithmie, tu ne peux acceder aux valeurs que par leur index (0,1,2 ...) , seul les tables de hachage permettent d'acceder au éléments par une clé. Les arrays de PHP sont un peu un mix des deux, si tu déclare un tableau (voir ci-dessous) et que tu le var_dump

$table = ['nom' => 'toto','dupont', 'mail' => 'toto@dupont.fr']; var_dump($table);die();

tu obtiendras ceci:

array (size=3) 'nom' => string 'toto' (length=4) 0 => string 'dupont' (length=6) 'mail' => string 'toto@dupont.fr' (length=14)

Donc si tu déclare une clé pour ta valeur, tu pourra la récupérer grace a cette même clé, sinon PHP en attribue une lui même. Sans clé/index tu ne peux pas retrouver ta valeur dans la masse de donnée que peux représenter un tableau.

FactureHero.com, il y a 11 ans

Le hic, c'est que j'ai un plugin mail Php à qui je dois passer la variable $to (les emails des receveurs ) et cette variable doit absolument ressembler à ça :

array('mail1@gmail.com', 'mail2@gmail.com')

Alors il doit bien y avoir un moyen de passer de ça :

array( (int) 0 => array( 'User' => array( 'mail' => 'mail1@gmail.com', ) ), (int) 1 => array( 'User' => array( 'mail' => 'mail2@gmail.com', ) ) )

au résultat attendu :)
Je vais chercher si je trouve la soluce je la mets ici.

Merci en tout cas, tu m'as mis sur la voie.

TransientDev, il y a 11 ans
function arrayMail($tableau) { $var = []; foreach($tableau as $k => $v) { $var[] = $v['User']['mail']; } return $var; }

Cette fonction devrait fonctionner. Voici un exemple de son application.

$old = [ [ 'User' => ['mail' => 'mail1@gmail.com'] ], [ 'User' => ['mail' => 'mail2@gmail.com'], ] ]; $new = arrayMail($old); var_dump($new); var_dump(array('mail1@gmail.com','mail2@gmail.com'));
Khovann, il y a 11 ans

Hello !
Il existe des fonctions de tableaux assez sympa en PHP, du genre array_keys, et array_values (cette dernière pourrait d'ailleurs t'être utile si j'ai bien compris ton souci)
Toute la doc est là, et traduite en français : http://php.net/manual/fr/ref.array.php . Il y a normalement de quoi faire à peu près ce qu'on veut (même du map/reduce/filter)

On se rend assez rapidement compte que les tableaux sont les amis des développeurs =)

FactureHero.com, il y a 11 ans

Le problème c'est que même avec des fonctions PHP type Array_values, j'ai toujours et encore un index du type

Array ( [0] => XL [1] => gold )

alors que moi je veux sortir effectivement uniquement les valeurs comme ceci:

Array ('XL', 'gold')

Là j'avoue que je bloque. j'ai essayé pas mal de chose, mais ça coince :)

Esseker Toccupe, il y a 11 ans

Hello,
Je suis peut-être à coté de la plaque, et dans ce cas, je n'ai rien saisi à ton problème, mais les réponses données contiennent les réponses que tu cherches.

$old = array( (int) 0 => array( 'User' => array( 'mail' => 'mail1@gmail.com', ) ), (int) 1 => array( 'User' => array( 'mail' => 'mail2@gmail.com', ) ) ); function arrayMail($tableau) { $var = array(); foreach($tableau as $k => $v) { $var[] = $v['User']['mail']; } return $var; } $new = arrayMail($old); $mavariable = '\''.implode(', ', $new).'\''; echo $mavariable;//affiche : 'mail1@gmail.com, mail2@gmail.com'

Je ne suis pas certain que tu ais besoin que ta variable soit entouré de simple quote.

AlexJM, il y a 11 ans
array( (int) 0 => ''mail1@gmail.com'', (int) 1 => ''mail2@gmail.com'' )

En faite, les cléfs sont celles par défaut, c'est un tableau normal, si tu var_dump

array('mail1@gmail.com', 'mail2@gmail.com')

Ca te mettra le même résultat ;)

FactureHero.com, il y a 11 ans

Exact AlexJM. Bon ça fonctionne avec mon plugin mail qui accepte enfin l'array (c'est finalement le principal) :) et effectivement ces 2 arrays sont exactement les mêmes vu de php. Merci tout le monde pour la mobilisation. :)