Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Werte aus Array löschen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Werte aus Array löschen


 
uspri
21-09-2007, 15:24 
 
Ich habe folgendes Problem mit der Bearbeitung zweier Arrays.

Array 1, Auflistung aller Modelids (Keys), bei denen eine Kategorie gelöscht werden soll (Wert ist die ID der zu löschenden Kategorie):

Array
(
[5] => 144
[7] => 155
[8] => 207
[9] => 46
[12] => 58
[16] => 164
[17] => 157
[22] => 213
[18] => 156
[24] => 95
[26] => 96
[19] => 195
[49] => 219
[50] => 212
[51] => 211
[52] => 215
)

Array 2, Modelid (Key) mit den vorhandenen Kategorien (zweite Dimension->Wert), wobei hier dann gelöscht werden soll:

Array
(
[5] => Array
(
[0] => 1
[1] => 2
[2] => 29
[3] => 30
[4] => 31
[5] => 32
[6] => 33
[7] => 34
[8] => 136
[9] => 138
[10] => 139
[11] => 144
[12] => 189
[13] => 190
[14] => 191
[15] => 193
)
}

Nun ist im Array 1 eine Key mit der 5 und dem Wert 144. Beim zweiten Array Key 5 soll in der Werteliste dann die 11/144 gelöscht werden, so das ich alle Werte in dem zweiten Array behalte, bis eben auf die, die in dem ersten Array drinnen stehen.

Wer kann mir dazu einen Tipp geben, wie ich das ohne zig Schleifen erledigen kann?

Gruß Uwe

 
TobiaZ
21-09-2007, 15:31 
 
Brauchst doch nur eine Schleife:

- array1 durchlaufen
- mit array_search den zu löschenden Key finden
- und dann mit unset() löschen.

Sowas findet man nicht, wenn man sich die Array-Funktionen ansieht?=

 
ghostgambler
21-09-2007, 15:31 
 
Ist doch nur eine einzige Schleife...
Erstes Array durchgehen, gucken ob das Gesuchte im zweiten existiert - wenn ja raus, wenn nein nächstes Element

 
uspri
21-09-2007, 16:01 
 
Damit geht das nun:

foreach($ukatids AS $k=>$v){
$tmp = array_search($v, $oldids[$k]);
if($tmp){
unset($oldids[$k][$tmp]);
}
}


Manchmal reicht schon ein Wink mit dem Zaunspfahl, damit man in die richtige Richtung gehen kann.

Danke Euch,
Gruß Uwe

 
TobiaZ
21-09-2007, 16:02 
 
foreach($ukatids as $k => $v)
if($tmp = array_search($v, $oldids[$k]))
unset($oldids[$k][$tmp]); ;)

 
3DMax
21-09-2007, 16:18 
 
eigentlich kann man sich doch array_search() und if sparen - einfach unset() und gut ist.

 
arkos
21-09-2007, 16:23 
 
Original geschrieben von 3DMax
eigentlich kann man sich doch array_search() und if sparen - einfach unset() und gut ist.

und wie willst du den key finden, der geunseted (derbes wort ;) ) werden soll?

 
TobiaZ
21-09-2007, 16:23 
 
array_search wohl eher nicht. Über das if() lässt sich streiten... ;)

 
3DMax
21-09-2007, 16:38 
 
Original geschrieben von TobiaZ
array_search wohl eher nicht.
sorry, hatte es nur überflogen, dachte der value des ersten arrays wäre der key des zweiten.
hast natürlich recht.[EDIT] und arkos auch :)

 
ghostgambler
21-09-2007, 17:17 
 
foreach($ukatids as $k => $v)
if(($tmp = array_search($v, $oldids[$k])) !== false)
unset($oldids[$k][$tmp]);
wäre richtig.


Extra-Klammern? Ich denke mal die sind nötig ... zumindest verschaffen sie dem Parser nötige Klarheit was zuerst und was dann.

 
TobiaZ
21-09-2007, 17:22 
 
japp

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.