arrays vergleichen
am 23.09.2006 00:15:02 von Merle Mohr
Hallo,
ein array vergleichen sollte doch
mit array_diff() gehen?
ich habe hier einen aktuellen Stand, mit 2 checkboxen
und sonst inputs:
$arrvorher
--- 42 ---
Hir
Phy
sco
E
2
on
0
0
--- 542 ---
....
und dann per
_POST gesendet so ein Veränderung
[42] => Array
(
[flger] => Hir
[gat] => Phy
[art] => sco
[er] => E
[no] => 2
[ok] => on
[vi] =>
[kzl] =>
[sr] => 0
[st] => 0
[wun] => on
[542] => Array
....
hier ist z.B. ein checkbox-on dazu gekommen.
Jetzt dachte ich mir so
$result = array_diff ( $_POST['neu'], $arrvorher['neu'] );
while(list($key, $val) = each($result)) {
echo ">> " .$key . ": " . $val ."
";
}
Veränderte anzeigen zu lassen, was
aber irgendwie nicht richtig klappt.
Weiß jemand, wie ich so einen Vergleich anstellen kann?
Es geht letztendlich um Tabellenupdate über
mehrere Datensätze.
vielen Danke schonmal,
Grüße,
Merle
Re: arrays vergleichen
am 23.09.2006 03:14:39 von Niels Braczek
Merle Mohr schrieb:
> ein array vergleichen sollte doch
> mit array_diff() gehen?
Nein. Zitat Manual:
"array_diff() returns an array containing all the values of array1 that
are not present in any of the other arguments."
Hier geht es nur um die Werte, unabhängig vom Index.
Du brauchst also die *_assoc-Variante(n).
Zuerst musst du alle *gemeinsamen* Werte ermitteln.
$diff =3D array_intersect_assoc( $_POST['neu'], $arrvorher['neu'] );
Die restlichen sind dann die veränderten:
$result =3D array_diff_assoc( $_POST['neu'], $diff );
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: arrays vergleichen
am 24.09.2006 00:02:22 von Merle Mohr
Hallo Niels,
vielen Dank!
> ...
> "array_diff()...
> Hier geht es nur um die Werte, unabhängig vom Index.
ich hoffte, ich hätte die IDs abgreifen können ...
> Du brauchst also die *_assoc-Variante(n).
>
> Zuerst musst du alle *gemeinsamen* Werte ermitteln.
>
> $diff = array_intersect_assoc( $_POST['neu'], $arrvorher['neu'] );
mit _assoc kannte ich das noch garnicht ...
weil ich php 4.2.1 habe ... :-|
>
> Die restlichen sind dann die veränderten:
>
> $result = array_diff_assoc( $_POST['neu'], $diff );
und mit Erklärung - cool!
aber, gehts auch "einfach" mit meinem php oder
sollte ich besser "schon" umrüsten (wollte ich erst in ein paar Wochen
mit neuem PC ...)
Grüße, Merle
Re: arrays vergleichen
am 24.09.2006 00:49:22 von Niels Braczek
Merle Mohr schrieb:
Lass bitte zwischen Zitat und deiner Antwort eine Leerzeile; du machst
mir (und anderen) das Lesen damit *wesentlich* leichter. Danke.
> > $diff =3D array_intersect_assoc( $_POST['neu'], $arrvorher['neu'] );=
> mit _assoc kannte ich das noch garnicht ...
> weil ich php 4.2.1 habe ... :-|
> > Die restlichen sind dann die veränderten:
> > $result =3D array_diff_assoc( $_POST['neu'], $diff );
> und mit Erklärung - cool!
> aber, gehts auch "einfach" mit meinem php oder
> sollte ich besser "schon" umrüsten (wollte ich erst in ein paar Woche=
n=20
> mit neuem PC ...)
Dann geht's halt nicht so komfortabel, sondern du musst das zu Fuß mach=
en.
$result =3D array();
foreach ( $_POST['neu'] as $k =3D> $v ) {
if ( isset( $arrvorher['neu'][$k] ) ) {
if ( $arrvorher['neu'][$k] !=3D $v ) {
$result[$k] =3D $v;
}
}
}
Ist auch nicht viel länger...
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: arrays vergleichen
am 25.09.2006 01:51:41 von Merle Mohr
Hallo Niels,
danke. Schön! Es funktioniert - ein bischen.
So ganz habe ich das aber noch nicht
im Griff. Das array ist ja noch eine Ebene tiefer.
Die array-Struktur sieht so aus,
ein var_dump - hier des "Ur-"zustandes:
array(1) {
["neu"]=>
array(2) {
[42]=>
array(11) {
["fl"]=> "Hirsc"
...
So habe ich den Code etwas "vertieft",
was so aussieht:
$result = array();
foreach ( $_POST['neu'] as $k1 => $kv1 ) {
foreach ( $kv1 as $kvk1 => $v1 ) {
if ( isset( $arrvorher['neu'][$k1][$kvk1] ) )
{
if ( $arrvorher['neu'][$k1][$kvk1] != $v1 )
{
$result[$kvk1] = $k1; }
} }
}
while(list($x, $y) = each($result)) {
echo $x . ": " . $y ."
\n";
}
in der Ausgabe ist das Ergebnis aber nicht ganz sicher:
im result liegen bisweilen falsche Felder und IDs, die ich
garnicht veränderte. Könnte das an obigem Code liegen oder
an anderem?
(Und - Es gibt leiiider noch ein anderes Problem bzgl.
unserialize, das ich gleich in einem neuen Posting beschreibe.)
schönen Gruß, Merle