[RESOLU] foreach et array_push

Mammouth du PHP | 725 Messages

03 sept. 2013, 08:49

je mets le code avant foreach:
$listInvUsers = array();
foreach(){

$listInvUsers .= $vpseudo;
var_dump($listInvUsers);
}
ici c'est une string, si je fais $listInvUsers []= $vpseudo; il disait "[] operator not supported for strings"

ViPHP
xTG
ViPHP | 7331 Messages

03 sept. 2013, 10:53

il disait "[] operator not supported for strings"
C'est que tu as du code qui traîne entre ton initialisation array() et ton opération d'ajout qui stockes une string à la place de l'array.
Fais la chasse au code mort. ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 sept. 2013, 11:12

D'après le dernier code posté c'est la première ligne non vide du foreach qui met le brin non ? XD
je mets le code avant foreach:
$listInvUsers = array();
foreach(){

$listInvUsers .= $vpseudo;
var_dump($listInvUsers);
}
ici c'est une string, si je fais $listInvUsers []= $vpseudo; il disait "[] operator not supported for strings"
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

03 sept. 2013, 11:16

si je mets rien, je recupere le pseudo seul entre foreach()
foreach() {

echo $pseudo; // resultat: pseudo1pseudo2pseudo3

}
est ce qu'il est possible de les separer par une virgule

Mammouth du PHP | 725 Messages

03 sept. 2013, 11:22

$listInvUsers = '';

foreach($to as $vpseudo){

	$listInvUsers .= $vpseudo;
	var_dump($listInvUsers);

} // end foreach

// string(7) "pseudo1"
// string(7) "pseudo2"
        

ViPHP
xTG
ViPHP | 7331 Messages

03 sept. 2013, 12:19

$listInvUsers = '';

foreach($to as $vpseudo){

	$listInvUsers .= $vpseudo;
	var_dump($listInvUsers);

} // end foreach

// string(7) "pseudo1"
// string(7) "pseudo2"
        
Cette boucle foreach n'est pas ce que tu exécutes.
Tu réinitialises ta variable $listInvUsers entre chaque itération d'après l'affichage.
$listInvUsers = '';
$to = array(1, 2, 3);

foreach($to as $vpseudo){

	$listInvUsers .= $vpseudo;
	var_dump($listInvUsers);

} // end foreach

// string(1) "1"
// string(2) "12"
// string(3) "123"
Pour rajouter une virgule entre chaque mot :
foreach($to as $vpseudo){
	$listInvUsers .= $vpseudo . ',';
} // end foreach
Ou bien :
$listInvUsers = implode(',', $to);

Mammouth du PHP | 725 Messages

03 sept. 2013, 14:43

en utilisant implode avec substr pour supprimer la deniere virgule, a ete deja teste, le resultat est:
pseudo1,pseudo2,pseudo3,

// apres substr

pseudo1pseudo2pseudo3

ViPHP
xTG
ViPHP | 7331 Messages

03 sept. 2013, 15:16

$listInvUsers = implode(',', $to);
$listInvUsers[strlen($listInvUsers) - 1] = ''; // une façon comme une autre de supprimer le dernier caractère de la chaîne

Mammouth du PHP | 725 Messages

04 sept. 2013, 04:56

je vais rafraichir un peu ma demande:

Je recois une liste de pseudos, sous forme de: pseudo1, pseudo2
$recepients 	= Isset($_POST['recepients'])	? strip_tags(strtolower($_POST['recepients']))                 : $recepients      = Null;

//J'extracte les pseudos
$to = explode(',', $recepients);

// je teste si les pseudos existent dans ma base ou non:
foreach($to as $vpseudo){
    
    $vpseudo = trim($vpseudo);

    $memSQL = 'SELECT idm, LOWER(pseudo) FROM members WHERE pseudo = "'.$vpseudo.'"';	

// si on a trouve
if($memRes) {

} // sinon, on extract les pseudos invalid
{
// c'est la ou le probleme existe, je veux lister les pseudo invalides, sous forme de: pseudo1, pseudo2, pseudo3
} // end if($memRes)
} // end foreach $to

ViPHP
xTG
ViPHP | 7331 Messages

04 sept. 2013, 08:32

Bah comme on te le dis depuis le début...
$recepients     = Isset($_POST['recepients'])   ? strip_tags(strtolower($_POST['recepients']))                 : $recepients      = Null;

//J'extracte les pseudos
$to = explode(',', $recepients);

$listPresent = array();
$listAbsent = array();

// je teste si les pseudos existent dans ma base ou non:
foreach($to as $vpseudo){
   
    $vpseudo = trim($vpseudo);

    $memSQL = 'SELECT idm, LOWER(pseudo) FROM members WHERE pseudo = "'.$vpseudo.'"';  
   // Exécution de la requête ici à rajouter

// si on a trouve
if($memRes) {
  array_push($listPresent, $vpseudo);
} // sinon, on extract les pseudos invalid
{
// c'est la ou le probleme existe, je veux lister les pseudo invalides, sous forme de: pseudo1, pseudo2, pseudo3
  array_push($listAbsent, $vpseudo);
} // end if($memRes)
} // end foreach $to

var_dump($listPresent);
var_dump($listAbsent);

// Formatage affichage
$listInvUsers = implode(',', $listAbsent);
$listInvUsers[strlen($listInvUsers) - 1] = '';
echo $listInvUsers;

Mammouth du PHP | 725 Messages

05 sept. 2013, 09:03

desolee xTG, c'etait de ma faute, j'ai fait le traitement dans foreach() { }

merci a vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 sept. 2013, 12:20

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.
Il en faut peu pour être heureux ......