Nur ein Zusatz.
Ich weiß, dass dies alt ist , aber ich wollte eine Lösung hinzufügen, von der ich nicht sehe, dass ich sie mir ausgedacht habe. Ich habe diese Frage auf der Suche nach einer anderen Lösung gefunden und mir nur gedacht: "Nun, während ich hier bin."
Zuallererst ist Neals Antwort gut und großartig, nachdem Sie Ihre Schleife ausgeführt haben. Ich würde es jedoch vorziehen, alle Arbeiten auf einmal zu erledigen. Natürlich musste ich in meinem speziellen Fall mehr arbeiten als in diesem einfachen Beispiel, aber die Methode gilt immer noch. Ich habe gesehen, wo ein paar andere foreach
Loops vorgeschlagen haben , aber das lässt dich nach der Arbeit aufgrund der Natur des Tieres immer noch zurück. Normalerweise schlage ich einfachere Dinge vor foreach
, aber in diesem Fall ist es am besten, sich an gute altmodische for loop
Logik zu erinnern . Einfach benutzen i
! Um den entsprechenden Index beizubehalten, subtrahieren Sie einfach i
nach jedem Entfernen eines Array-Elements.
Hier ist mein einfaches Arbeitsbeispiel :
$array = array(1,2,3,4,5);
for ($i = 0; $i < count($array); $i++) {
if($array[$i] == 1 || $array[$i] == 2) {
array_splice($array, $i, 1);
$i--;
}
}
Wird ausgegeben:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Dies kann viele einfache Implementierungen haben. Zum Beispiel erforderte mein genauer Fall das Halten des neuesten Elements im Array basierend auf mehrdimensionalen Werten. Ich zeige dir was ich meine:
$files = array(
array(
'name' => 'example.zip',
'size' => '100000000',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example.zip',
'size' => '10726556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example.zip',
'size' => '110726556',
'type' => 'application/x-zip-compressed',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
),
array(
'name' => 'example2.zip',
'size' => '12356556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example2.zip',
'deleteUrl' => 'server/php/?file=example2.zip',
'deleteType' => 'DELETE'
)
);
for ($i = 0; $i < count($files); $i++) {
if ($i > 0) {
if (is_array($files[$i-1])) {
if (!key_exists('name', array_diff($files[$i], $files[$i-1]))) {
if (!key_exists('url', $files[$i]) && key_exists('url', $files[$i-1])) $files[$i]['url'] = $files[$i-1]['url'];
$i--;
array_splice($files, $i, 1);
}
}
}
}
Wird ausgegeben:
array(1) {
[0]=> array(6) {
["name"]=> string(11) "example.zip"
["size"]=> string(9) "110726556"
["type"]=> string(28) "application/x-zip-compressed"
["deleteUrl"]=> string(28) "server/php/?file=example.zip"
["deleteType"]=> string(6) "DELETE"
["url"]=> string(44) "28188b90db990f5c5f75eb960a643b96/example.zip"
}
[1]=> array(6) {
["name"]=> string(11) "example2.zip"
["size"]=> string(9) "12356556"
["type"]=> string(28) "application/x-zip-compressed"
["deleteUrl"]=> string(28) "server/php/?file=example2.zip"
["deleteType"]=> string(6) "DELETE"
["url"]=> string(45) "28188b90db990f5c5f75eb960a643b96/example2.zip"
}
}
Wie Sie sehen, manipuliere ich $ i vor dem Spleiß, während ich versuche, das vorherige und nicht das aktuelle Element zu entfernen.