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
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'));
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 =)
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.
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 ;)
Bonjour,
$var = [];
foreach($tableau as $k => $v)
{
$var[] = $v['User']['mail'];
}
$mavariable = implode(', ', $var);
je pense que ceci devrait fonctionner
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 :)
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 )
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')
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.
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.
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 :)
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. :)