Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2011, 13h59   #1
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Par défaut Fonction cumul sur un array

Bonjour,
ayant essayé avec mon ami google de trouver une réponse (qui n'a malheureusement rien donné), je viens ici pour demander votre aide.

Je possède un array comportant differentes valeurs, par exemeple :
Code :
1
2
3
4
5
6
7
8
 
$tableau=array();
$tableau[106042]=3.2;
$tableau[107047]=0;
$tableau[109070]=0;
$tableau[120080]=12;
$tableau[140060]=0;
$tableau[150075]=5;
Les valeurs des clés sont des timestamp (ici c'est seulement un exemple ) générées aléatoirement.

Je voudrais trouver une fonction (ou un moyen pour y parvenir) pour arriver à cumuler les valeurs, par exemple on obtiendrait ceci :
Code :
1
2
3
4
5
6
7
 
$tableau[106042]=3.2;
$tableau[107047]=3.2;
$tableau[109070]=3.2;
$tableau[120080]=15.2;
$tableau[140060]=15.2;
$tableau[150075]=20.2;
J'ai essayé avec du foreach, la fonction next, current, prev... je n'y arrive pas .

Par quel moyen je pourrais arriver à ce résultat ?
Merci
Tintin
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 14h05   #2
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

array_sum ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 14h18   #3
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Avec une boucle foreach :
Code :
1
2
3
4
5
6
 
foreach ($tableau as $key => $val)
{
$test[$key]=array_sum($tableau);
 
}
J'obtiens pour toutes les valeurs le total du tableau soit 20.2 pour toutes les valeurs...
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 14h35   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
oui, je pensais que array_sum gérait les clés...

et ça ? :

Code :
1
2
3
foreach( $tableau as $key => $val) {
	$tab[$key] += $val;
}
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/09/2011, 15h50   #5
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
J'obtiens :
Citation:
Undefined variable : $test
undefined offset : [106042]
undefined offset : [107047]
undefined offset : [109070]
...

D'où cela peut-il bien venir ?
En tout cas merci de t'intéresser à mon problème.
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h09   #6
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
remontre ton code, d'où vient ton $test ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h38   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
SI je comprends bien, le but est de cumuler d'un index vers le suivant.
Genre si le tableau d'origine est
[a] => 2
[b] => 3
[c] => 9
le but est d'obtenir un tableau du genre :
[a] => 2 (valeur de a)
[b] => 2 + 3  = 5 (valeur de b + a)
[c] => 9 + 5 = 14 (valeur de c + b)
Quelque chose comme ça ?
Code :
1
2
3
4
5
6
7
$tab = array(2, 3, 9);
$tabCumul = array();
$cumul = 0;
foreach ($tab as $key => $val) {
	$cumul += $val;
	$tabCumul[$key] = $cumul;
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/09/2011, 18h17   #8
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Celira,
je testerai ta solution ce soir à la maison, j'espère que ça marchera.
Sinon, quelle est la signification de cette ligne (du signe +=) ?
Est-ce la même chose que ça ?
Code :
$cumul = $cumul + $val;
Citation:
remontre ton code, d'où vient ton $test ?
C'était mon tableau final.


En tout cas merci pour vos réponses.
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 18h19   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Je me demande bien ou est la difficulté ?

Code :
1
2
3
4
5
6
7
8
 
$a = array();
$a[123456] = 1;
$a[123457] = sum($a) + 2;
$a[123458] = sum($a) + 3;
$a[123459] = sum($a) + 5;
$a[123450] = sum($a) + 123;
$a[123451] = sum($a) + 6;
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 19h04   #10
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Citation:
Je me demande bien ou est la difficulté ?

$a = array();
$a[123456] = 1;
$a[123457] = sum($a) + 2;
$a[123458] = sum($a) + 3;
$a[123459] = sum($a) + 5;
$a[123450] = sum($a) + 123;
$a[123451] = sum($a) + 6;

Euh...
D'où tu sort la fonction sum et les valeurs (123???).
Je n'ai pas du tout compris ta réponse...
C'est pour un tableau avec plus de 1000 entrées .
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 20h06   #11
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Bon effectivement la réponse de Celira fonctionne à merveille .
Encore merci pour ton aide.
Voici la réponse :
Code :
1
2
3
4
5
6
7
8
 
$tab = array(2, 3, 9);
$tabCumul = array();
$cumul = 0;
foreach ($tab as $key => $val) {
	$cumul += $val;
	$tabCumul[$key] = $cumul;
}
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h54.


 
 
 
 
Partenaires

Hébergement Web