[PHP5] - Zählen von Objekten

MarcDK

Banned
Registriert
Mai 2001
Beiträge
3.559
Hi Leute!

Ich habe ein Programm, wo in einer Variable diverse Objekte gespeichert sind:

$this->members enthält Objekte wie "member1, member2" usw wie der hier:

class member{
public level;
public rang_number;
public profession;
}

So, nun möchte ich z.B. die Member in $this->members zählen. Mache ich easy mit
count($this->members);

Ok, aber die Member haben Eigenschaften wie z.B.

echo $this->members[2]->profession;

Wäre dann "Solider".

Wie zähle ich, wie viele "Members" von den Objekten "Soldier" sind.

Geht es einfach? Ich dachte an ne for-Schleife wie das hier:

PHP:
$sol=0;
$enfo=0;
 
 for ($i=0, $i<count($this->members);$i++){
 
 switch ($this->members[$i]->profession){
 
case 'Soldier':
 $sol=$sol+1
 break;
 
case 'Enforcer':
$enfo=$enfo+1
  break;
 }
 
 }

Aber das kann es doch nicht sein, oder? Irgendwie kome ich mir dabei doof vor. Bin ich es? Gibt es was viel einfacheres?
 
Wenn die Member in einer MySQL stehen kannst Du ja die Anzahl der Reihen auslesen in die Profession = "Soldier" ist, somit hättest Du gleich die richtige Zahl.
 
Ne, kommt aus einer XML-Datei auf die ich keinen Einfluss habe.

Also doch die for+case Sache?
 
quick & dirty:

PHP:
for($i = 0; $i < count($this->members); $i++) {
    @$c[$this->members[$i]->profession]++;
}
Zugriff dann über $c['Soldier']. Kannst das Array vorher auch initialisieren und das @ vor $c weglassen.


Alternativ auch in einem Objekt...

PHP:
for ($i=0; $i<count($this->members);$i++) {
    @$c->{$this->members[$i]->profession}++;
}

Zugriff dann über $c->Soldier. Das mit dem initialisieren gilt auch hier.

->profession sollte nur nie leer sein. Sonst gibts Probleme.
Die kann man aber mit einer if-Abfrage abfangen.
 
Zuletzt bearbeitet:
Mhh, ok. Da ssihet interessant aus aber er sagt bei mir (ZendStudio)

illegal offset type. Ich habe es mal kontroliert. Er sollte es eigentlich machen. $this->members[$i]->profession spruckt wirklich in jedem for-Durchlauf eine Profession aus aber irgendwie klappt das nicht.
 
Hm... ich habs mit einem Array von Objekten, die ->profession haben getestet.

Die Doku sagt: "You cannot use arrays or objects as keys. Doing so will result in a warning: Illegal offset type." (PHP Manual - Arrays)

Anscheinend ist $this->members[$i]->profession ein Object, ich bin aber von nem String ausgegangen. Wenn dus irgendwie in nen String umwandeln kannst, verwende eben diesen string als Key.

HTH, Erazor
 
Zurück
Oben