AHllo Zusammen,
ich habe folgende Frage.
Wie kann ich die Anzahl eines bestimmten Wertes einen Objektes zählen?
Also ich habe z.B. den Wert Nord, Süd, Wets und Ost.
Dazu habe ich eine Abfrage die mir Datensätze mit den verschiedenen Werten liefert.
Jetzt will ich die Anzahl der Nord, Süd und so weiter zählen.
Hier meine Aussage per print_r.
stdClass Object
(
[caseData] => CaseObj Object
(
[attributes:private] => stdClass Object
(
[caseID] => 1234567
[erstellt] => 2006-10-19 00:21:53
)
)
[qplz] => Array
(
[0] => stdClass Object
(
[plz] => 81664
[region] => West
)
)
[qmsc] => Array
(
[0] => stdClass Object
(
[plz] => 81667
[bsc] => 1234678
[msc] => 547894521
)
)
)
Ich habe es schon mit $data->qplz->region[0]->west versucht, aber das geht nicht.
Wie kann ich auf den Wert plz ([region] => West) im Object [qplz] zugreifen??
Danke
Ich würd eher
$data->qplz["region"] behaupten...
keiner da der sich auskennt und mir helfen will??
also ich habs jetzt nach dem tip so versucht.
$caseData = array();
foreach ($cases as $id) {
$case = CaseObj::find($id); //liefert ALLE Casedaten pro Case über die externe Function CaseObj.
$data = new stdClass(); //Klasse die einen Container um das Array bildet.
$data->caseData = $case; //Bildet um das Case Array (Casedaten) einen Objekt Container
$data->qplz = $q->qplz($case->plz); //holt sich die qplz Daten zu den cases/ plz
$data->qmsc = $q->qmsc($case->plz); //holt sich die qmsc Daten zu den cases / plz
$caseData[$case->caseID] = $data; //fügt die Casedaten und die qplz sowie die qmsc Daten zu einer Klasse/Objekt zusammen
print_r(count($data->qplz[0]->region['ost']));
}
Es kommt raus:
1111111111111111111111111111111111111111111111111111111111111101111
Wie muss ich basteln, damit er mir jeden Datensatz einzeln zählt, sondern nach Ost, Wets u.s.w. ??
Hallo Guten Abend,
evtl. kann und will mir ja heute nochmal jemand weiter helfen.
Ich tüfftle immernoch mit der zählerei rum.
Folgendes habe ich nun erreich:
foreach ($caseData as $r) {
if (trim($r->qplz[0]->region) == "West") {
$w = count($r->qplz[0]->region);
print_r($w);
}
if (trim($r->qplz[0]->region) == "Ost") {
$o = count($r->qplz[0]->region);
print_r($o);
}
if (trim($r->qplz[0]->region) == "Sued") {
$s = count($r->qplz[0]->region);
print_r($s);
}
if (trim($r->qplz[0]->region) == "Nord") {
$n = count($r->qplz[0]->region);
print_r($n);
}
}
Und Ergebnis ist 111111111111111111111111111111111111111111111111
111111111111111111111111111
So hab ich den Wert 1 für jeden Fall, aber wie bekomme ich die Anzahl für jede REgion raus?
Danke!
hat sich erledigt.
Ich konnte mir nun selber helfen...
Habe einfach folgendes gemacht.
foreach ($caseData as $r) {
if (trim($r->qplz[0]->region) == "West") {
$w[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Ost") {
$o[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Sued") {
$s[$r->qplz[0]->region]++;
}
if (trim($r->qplz[0]->region) == "Nord") {
$n[$r->qplz[0]->region]++;
}
}
so richtig habe ich nicht den plan, was du da treibst, aber sei es drum.
du hast also alle objekte in einem array und durchläufst damit alle per
foreach ($caseData as $r).
jetzt möchtest du die anzahl der jeweiligen regionen zählen, auf die du über den public member $r->qplz[0]->region zugreifen kannst - richtig?
dazu kannst du dir ein array treffer anlegen array('west'=>0, 'ost'=>0 ... usw.)
... und innerhalb der foreach-schleife erhöhst du den value des entsprechenden keys/region um 1, welcher wert erhöht wird, entscheidet sich wiedrum innerhalb von switch-case
jahlives
22-12-2006, 07:18
@topicstarter
Du hast einfach bei jedem Schleifendurchlauf die Zahl angegeben. Besser wäre es aber diese Zahlen zu addieren
$ost = 0;
$west = 0;
$nord = 0;
$sued = 0;
foreach ($cases as $id) {
switch($id->qplz[0]->region){
case 'nord':
$nord += 1;
break;
case 'west':
$west += 1;
break;
case 'ost':
$ost += 1;
break;
case 'sued':
$sued += 1;
break;
}
}
Gruss
tobi
danke tobi,
du bist wenigstens der einzigste hier der erstens einen plan hat und mir zweitens bisher immer helfen konnte.
Ja per switch case hab ich es auch schon versucht und nicht hin bekommen (weil falsch gedacht) ;o(
Ich habs jetzt wie gesagt anders gelöst, geht auch;o)
Danke Dir!