Solo un additivo.
So che questo è vecchio , ma volevo aggiungere una soluzione e non vedo che mi sono inventato. Ho trovato questa domanda mentre cercavo una soluzione diversa e ho appena pensato: "Bene, mentre sono qui".
Prima di tutto, la risposta di Neal è buona e ottima da usare dopo aver eseguito il ciclo, tuttavia, preferirei fare tutto il lavoro in una volta. Certo, nel mio caso specifico ho dovuto fare più lavoro di questo semplice esempio qui, ma il metodo si applica ancora. Ho visto dove un paio di altri hanno suggerito dei foreachloop, tuttavia, questo ti lascia ancora dopo il lavoro a causa della natura della bestia. Normalmente suggerisco cose più semplici come foreach, tuttavia, in questo caso, è meglio ricordare la buona for looplogica vecchio stile . Basta usare i! Per mantenere un indice appropriato, sottraete semplicemente idopo ogni rimozione di un elemento Array.
Ecco il mio esempio semplice e funzionante :
$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--;
}
}
Uscita:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Questo può avere molte semplici implementazioni. Ad esempio, il mio caso esatto ha richiesto la conservazione dell'ultimo elemento nell'array in base a valori multidimensionali. Ti mostrerò cosa intendo:
$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);
}
}
}
}
Uscita:
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"
}
}
Come vedi, manipolo $ i prima della giunzione mentre cerco di rimuovere l'elemento precedente, anziché l'elemento attuale.