Element aus Array entfernen und Indizie anpassen


tklustig

Erfahrenes Mitglied
Hallo Leute, folgender Code überprüft, ob ein Element in einem Array ist. Das alleine reicht allerdings nicht. Sofern das Element im Array ist, muss es entfernt werden. Ich weiß, dass man das mit unset hinkriegt. Allerdings
darf dabei die Indizierung nicht verändert werden. Die Elemente müssen nach wie vor geordnet vorliegen(0,1,2...)
Weiß jemand Rat?
PHP:
    for ($i = 0; $i < count($filename_unique); $i++) {
                    if (!in_array($filename_unique[$i], $FilesSeveral)) {
//filename_unique[$i] muss im false-Fall aus dem Array entfernt werden. Die Indizies dürfen nicht durcheinander geraten
                        $ftp->DateienLoeschen($IdOfFk, $ftp, $filename_unique, MailAusgangController::RenderBackInCaseOfError);
                    } else {
                        $session->addFlash('info', 'Der Anhang ' . $filename_unique[$i] . ' wurde nicht von Ihrem WebSpace entfernt, da er  mehrere mal verwendet wird!');
                    }
                }
 

merzi86

Erfahrenes Mitglied
Wenn der Key erhalten bleiben soll, dann weise doch dem Eintrag einen Leeren Inhalt zu.

Also so ungefähr so:
PHP:
$filename_unique[$i] = null;
oder
PHP:
$filename_unique[$i] = '';
 

Yaslaw

n/a
Moderator
Korrektur: unset funktioniert doch einwandfrei
PHP:
$data = array("A", "B", "C", "D");
print_r($data);

$removeId = 2;
unset($data[$removeId]);
print_r($data);

$data = array_values($data);
print_r($data);
Code:
Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
)
Array
(
    [0] => A
    [1] => B
    [3] => D
)
Array
(
    [0] => A
    [1] => B
    [2] => D
)
 
Zuletzt bearbeitet:

merzi86

Erfahrenes Mitglied
Ja es funktioniert auch so, wie es soll.
Nur es funktioniert nicht so, wie es in diesen Fall von tklustig gewünscht ist.

Dadurch das der Eintrag mit dem Key 2 gelöscht wird stimmt
1. die Anzahl die mittels Count ausgegeben wird ist 3, dadurch würde der Eintrag mit dem Key 3 durch die for-Schleife nicht erreicht. Dies könnte man umgehen, indem man eine foreach-Schleife nutzt.
2. wenn die for-Schleife bei der 2 ankommt und auf den Eintrag mit dem Key 2 zugreifen will kommt ein Error, da es diesen Eintrag nicht gibt. Dieses Problem liesse sich auch mit einer foreach-Schleife umgehen.