Der folgende Beitrag wurde am 15. 08. 2005, 10:30 Uhr von Patzschke Steffen veröffentlicht.
Liebe PHP Gemeinde,
habe ein Problem mit der Zusammenführung von assoziierten Arrays:
<?php
$ary_maschkosten=array();
array_push($ary_maschkosten,array("maschkost_jahre"=>1999,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2000,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2001,"MaschKosten"=>0));
print_r(($ary_maschkosten));
$ary_maschkosten_qry=array();
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2000,"MaschKosten"=>1000));
print_r(($ary_maschkosten_qry));
?>
Im Ergenbis brauche ich beide in einem, jedoch der Datensatz mit "MaschKosten"=>1000 muß den "MaschKosten"=>0 ersetzen. Ich bitte um Hilfe, denn ich schlage mich schon einen Tag damit rum. Mit in array hab ich's auch schon versucht; keine Chance gefunden in einem assoz. Array direkt zu suchen, oder doch?
Tausend Dank.
Der folgende Beitrag wurde am 15. 08. 2005, 10:54 Uhr von Marc Reichelt veröffentlicht.
Hallo Patzschke,
Dein Array:
$ary_maschkosten=array();
array_push($ary_maschkosten, array("maschkost_jahre"=>1999,"MaschKosten"=>0));
array_push($ary_maschkosten, array("maschkost_jahre"=>2000,"MaschKosten"=>0));
array_push($ary_maschkosten, array("maschkost_jahre"=>2001,"MaschKosten"=>0));
Und nun möchtest du also den Eintrag ersetzen, wo der Eintrag "maschkost_jahre" = 2000 ist, aber folgender Code hängt dir natürlich einfach nur das Array dran:array_push($ary_maschkosten, array("maschkost_jahre"=>2000,"MaschKosten"=>1000));
Vielleicht solltest du es mit einer Schleife versuchen:
for($i=0; $i<count($ary_maschkosten); $i++)
{
if($ary_maschkosten[$i]['maschkost_jahre'] == 2000)
{
$ary_maschkosten[$i] = array("maschkost_jahre"=>2000,"MaschKosten"=>1000);
break;
}
}
Und so wie ich das sehe wäre eine Datenbank für dich genau das richtige, um all deine Probleme _komfortabel_ zu lösen. Suchwort für dich ist hierbei z.B. "MySQL".
Grüße
Marc Reichelt || http://www.marcreichelt.de/
--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html
Der folgende Beitrag wurde am 15. 08. 2005, 11:16 Uhr von Steffen veröffentlicht.
Hallo Marc,
danke für deine Antwort. Das Array $ary_maschkosten_qry kommt aus DISTINCT- Query einer Access-DB. Nun ist es so, dass ich das Array $ary_maschkosten über eine Schleife mit den Jahren 1999-2009 (immer 10Jahre) fülle und den MaschKosten hier null(0) übergebe. Die DISTICNT Query liefert nun MaschKost für z.B. 2001,2003 und 2005. Jetzt brauche ich ein Array wo alle 10 Jahre gelistet sind und in den relevanten MaschKost aus den ermittelten Jahren der DISTINCT-query. ok?
danke für deine bemühungen.
Der folgende Beitrag wurde am 15. 08. 2005, 12:47 Uhr von Steffen veröffentlicht.
hallo mark,
hier meine php-datei, die mittlerweile funktioniert. ich vergleiche jetzt
die beiden array mit 2 for schleifen aber gibt es da keine bessere lösung,
da er ja 'zig mal vergleichen muß. probier sie mal aus und dann weißt du wo
mein problem liegt. danke dir.
<html>
<body>
<?php
$ary_maschkosten=array();
array_push($ary_maschkosten,array("maschkost_jahre"=>1999,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2000,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2001,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2002,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2003,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2004,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2005,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2006,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2007,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2008,"MaschKosten"=>0))
;
array_push($ary_maschkosten,array("maschkost_jahre"=>2009,"MaschKosten"=>0))
;
echo "<b>das ist das pauschl gefüllte Array</b><br>";
print_r(($ary_maschkosten));
$ary_maschkosten_qry=array();
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2000,"MaschKosten"=
>1000));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2001,"MaschKosten"=
>500));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2007,"MaschKosten"=
>777));
echo "<b>und das sind die echten werte der DB</b><br>";
print_r(($ary_maschkosten_qry));
for($i=0; $i<count($ary_maschkosten); $i++)
{
for($k=0; $k<count($ary_maschkosten_qry); $k++)
{
if($ary_maschkosten[$i]['maschkost_jahre'] ==
$ary_maschkosten_qry[$k]['maschkost_jahre'])
{ //echo "drin ".$ary_maschkosten[$i]['maschkost_jahre']."i".$i."k".$k."
<br>";
$ary_maschkosten[$i] =
array("maschkost_jahre"=>$ary_maschkosten_qry[$k]['maschkost_jahre'],"MaschK
osten"=>$ary_maschkosten_qry[$k]['MaschKosten']);
break;
}
else
{
//echo "else
".$ary_maschkosten[$i]['maschkost_jahre']."I".$i."K".$k."<br>";
$ary_maschkosten[$i] =
array("maschkost_jahre"=>$ary_maschkosten[$i]['maschkost_jahre'],"MaschKoste
n"=>$ary_maschkosten[$i]['MaschKosten']);
}
}
}
echo "<b>und das soll das ergebnis sein</b><br>";
print_r(($ary_maschkosten));
?>
</body>
</html>
Der folgende Beitrag wurde am 15. 08. 2005, 13:00 Uhr von Daniel veröffentlicht.
Ahoi Steffen,
warum nimmst du nicht das array aus der DB und fügst dann die fehlenden jahre mit 0 hinzu?
$ary_maschkosten_qry=array();
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2000,"MaschKosten"=>1000));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2001,"MaschKosten"=>500));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2007,"MaschKosten"=>777));
$jahr = 1999;
foreach($ary_maschkosten_qry as $zwischenwert)
{
while($jahr < $zwischenwert['maschkost_jahre'])
{
$echtewerte[]['maschkost_jahre'] = $jahr;
$echtewerte[]['MaschKosten'] = 0;
$jahr++
}
$echtewerte[]['maschkost_jahre'] = $zwischenwert['maschkost_jahre'];
$echtewerte[]['MaschKosten'] = $zwischenwert['MaschKosten'];
}
MfG
--
Alle Angaben wie immer ohne Gewähr
\ \ / / \ \ / /
\ \ / / \ \ / /
\ /´¯.l.¯`\ / \ /´¯.l.¯`\ /
| l .l. (¯ '\ /' ¯) .l. 1 |
l l .l. \ \ / / .l. 1 1
l l´¯.l´¯.l \ '| |' / 1.¯´1.¯´1 1
\ /
Der folgende Beitrag wurde am 15. 08. 2005, 13:09 Uhr von Daniel veröffentlicht.
Ahoi Daniel,
>
> $ary_maschkosten_qry=array();
> array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2000,"MaschKosten"=>1000));
> array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2001,"MaschKosten"=>500));
> array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2007,"MaschKosten"=>777));
>
> $jahr = 1999;
$z=0;
> foreach($ary_maschkosten_qry as $zwischenwert)
> {
> while($jahr < $zwischenwert['maschkost_jahre'])
> {
> $echtewerte[$z]['maschkost_jahre'] = $jahr;
^^
> $echtewerte[$z]['MaschKosten'] = 0;
^^
> $jahr++;
^
$z++;
> }
> $echtewerte[$z]['maschkost_jahre'] = zwischenwert['maschkost_jahre'];
^^
> $echtewerte[$z]['MaschKosten'] = $zwischenwert['MaschKosten'];
^^
$jahr++;
$z++;
> }
>
Jetzt must du nurnoch wegen der 10 jahresspanne kucken ein if($z<10) bzw. while() könnte helfen.
MfG
--
Alle Angaben wie immer ohne Gewähr
\ \ / / \ \ / /
\ \ / / \ \ / /
\ /´¯.l.¯`\ / \ /´¯.l.¯`\ /
| l .l. (¯ '\ /' ¯) .l. 1 |
l l .l. \ \ / / .l. 1 1
l l´¯.l´¯.l \ '| |' / 1.¯´1.¯´1 1
\ /
Der folgende Beitrag wurde am 15. 08. 2005, 13:34 Uhr von Steffen veröffentlicht.
hi daniel,
hier nochmal mein ganzer code. es funktioniert so aber gibt es denn nicht eine bessere variante, denn so läuft er ja 'zig mal durch die schleifen und prüft!
<html>
<body>
<?php
$ary_maschkosten=array();
array_push($ary_maschkosten,array("maschkost_jahre"=>1999,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2000,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2001,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2002,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2003,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2004,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2005,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2006,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2007,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2008,"MaschKosten"=>0));
array_push($ary_maschkosten,array("maschkost_jahre"=>2009,"MaschKosten"=>0));
echo "<b>das ist das pauschl gefüllte Array</b><br>";
print_r(($ary_maschkosten));
$ary_maschkosten_qry=array();
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2000,"MaschKosten"=>1000));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2001,"MaschKosten"=>500));
array_push($ary_maschkosten_qry,array("maschkost_jahre"=>2007,"MaschKosten"=>777));
echo "<b><br>und das sind die echten werte der DB</b><br>";
print_r(($ary_maschkosten_qry));
$total_maschkost=0;
for($i=0; $i<count($ary_maschkosten); $i++)
{
for($k=0; $k<count($ary_maschkosten_qry); $k++)
{
if($ary_maschkosten[$i]['maschkost_jahre'] == $ary_maschkosten_qry[$k]['maschkost_jahre'])
{ //echo "drin ".$ary_maschkosten[$i]['maschkost_jahre']."i".$i."k".$k." <br>";
$ary_maschkosten[$i] = array("maschkost_jahre"=>$ary_maschkosten_qry[$k]['maschkost_jahre'],"MaschKosten"=>$ary_maschkosten_qry[$k]['MaschKosten']);
$total_maschkost=$total_maschkost+$ary_maschkosten_qry[$k]['MaschKosten'];
break;
}
//else
//{
//echo "else ".$ary_maschkosten[$i]['maschkost_jahre']."I".$i."K".$k."<br>";
//$ary_maschkosten[$i] = array("maschkost_jahre"=>$ary_maschkosten[$i]['maschkost_jahre'],"MaschKosten"=>$ary_maschkosten[$i]['MaschKosten']);
//}
}
}
echo "<b>und das soll das ergebnis sein</b><br>";
print_r(($ary_maschkosten));
echo "<br>".$total_maschkost."\n";
?>
</body>
</html>
Der folgende Beitrag wurde am 15. 08. 2005, 13:41 Uhr von Daniel veröffentlicht.
Ahoi Steffen,
> hi daniel,
>
> hier nochmal mein ganzer code. es funktioniert so aber gibt es denn nicht eine bessere variante, denn so läuft er ja 'zig mal durch die schleifen und prüft!
hast du meinen code auch gelesen? da prüfst du dann nicht so oft.
PS: von 1999 bis 2009 sind 11 jahre und keine 10.
MfG
--
Alle Angaben wie immer ohne Gewähr
\ \ / / \ \ / /
\ \ / / \ \ / /
\ /´¯.l.¯`\ / \ /´¯.l.¯`\ /
| l .l. (¯ '\ /' ¯) .l. 1 |
l l .l. \ \ / / .l. 1 1
l l´¯.l´¯.l \ '| |' / 1.¯´1.¯´1 1
\ /
Der folgende Beitrag wurde am 15. 08. 2005, 13:47 Uhr von Steffen veröffentlicht.
Ja, du hast recht aber ich dachte es gibt eine Variante so ganz ohne schleifen, so dirket über array-funktionen.
Ciao Steffen
Der folgende Beitrag wurde am 15. 08. 2005, 14:54 Uhr von Daniel veröffentlicht.
Ahoi Steffen,
> Ja, du hast recht aber ich dachte es gibt eine Variante so ganz ohne schleifen, so dirket über array-funktionen.
evt. kannst du dir mit
http://de3.php.net/manual/de/function.array-diff.php
etwas basteln. oder einer anderen array funktion
http://de3.php.net/manual/de/ref.array.php
MfG
--
Alle Angaben wie immer ohne Gewähr
\ \ / / \ \ / /
\ \ / / \ \ / /
\ /´¯.l.¯`\ / \ /´¯.l.¯`\ /
| l .l. (¯ '\ /' ¯) .l. 1 |
l l .l. \ \ / / .l. 1 1
l l´¯.l´¯.l \ '| |' / 1.¯´1.¯´1 1
\ /
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4