Faire la somme de la propriété d'un groupe d'objet

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Faire la somme de la propriété d'un groupe d'objet

Re: Faire la somme de la propriété d'un groupe d'objet

par nhachet » 29 août 2011, 16:57

Par extension, voici une petite classe contenant une seule méthode statique permettant de faire exactement la même chose mais plus réutilisable :
<?php
// Classe MonObj
class MonObj {
	private $value = 0;
	
	public function __construct($value) { $this -> value = $value; }
	public function getValue() { return $this -> value; }
}

/**
 * Classe permettant d'additionner les valeurs d'une propriété d'un objet
 */
class AddObj {
	
	/**
	 * Méthode privé utilisée pour réaliser la somme des objets
	 * @param unknown_type $property
	 */
	private static function _getValue($obj, $property) {
		return $obj -> $property();
	}
	
	/**
	 * Ajoute les propriétés d'une liste d'objets donnés
	 * @param $array Le tableau contenant les objets
	 * @param $property La propriété à utiliser pour effectuer l'addition
	 */
    public static function add(Array $array, $property) {
		return array_sum(array_map(array(__CLASS__, '_getValue'), $array, array_fill(0, count($array), $property)));
	}
	
} 

// Tableau contenant les objets
$tab = array(
    new MonObj(4),
    new MonObj(7),
    new MonObj(1),
    new MonObj(2)
);

// Total
echo AddObj :: add($tab, 'getValue');

Re: Faire la somme de la propriété d'un groupe d'objet

par Vakarm » 29 août 2011, 16:46

Merci, je conaissais pas array_map

Très utile :)

Re: Faire la somme de la propriété d'un groupe d'objet

par nhachet » 29 août 2011, 16:42

Salut,

oui c'est possible mais pas sûr que ce soit très intuitif. Voilà un code fonctionnel :
<?php

// Classe MonObj
class MonObj {
	
	private $value = 0;
	
	public function __construct($value) { $this -> value = $value; }
	public function getValue() { return $this -> value; }
	
}

// Tableau contenant les objets
$tab = array(
    new MonObj(4),
    new MonObj(7),
    new MonObj(1),
    new MonObj(2)
);

// Fonction permettant d'extraire la valeur des objets
function getValue($obj) {
	return $obj -> getValue();
}

// Total
echo array_sum(array_map('getValue', $tab));

Faire la somme de la propriété d'un groupe d'objet

par Vakarm » 29 août 2011, 15:59

Bonjour,

J'ai un array qui contient des objets de même nature. Chaque objet a une propriété «valeur»;
je voudrais faire la somme de tout les objets->valeur pour obtenir la valeur total de tout mes objets.

Évidemment je pourrais utiliser foreach (allObjets as oneObjet) et incrémenter une variable de valeur totale, mais je me demandais s'il existe une fonction prédéfinie pour y parvenir?

Merci beaucoup