Solo un aditivo.
Sé que esto es viejo , pero quería agregar una solución que no veo que se me ocurrió. Encontré esta pregunta mientras buscaba una solución diferente y simplemente pensé: "Bueno, mientras estoy aquí".
En primer lugar, la respuesta de Neal es buena y excelente de usar después de ejecutar su ciclo, sin embargo, preferiría hacer todo el trabajo a la vez. Por supuesto, en mi caso específico tuve que hacer más trabajo que este simple ejemplo aquí, pero el método aún se aplica. Vi dónde otros dos sugirieron foreachbucles, sin embargo, esto todavía te deja después del trabajo debido a la naturaleza de la bestia. Normalmente sugiero cosas más simples como foreach, sin embargo, en este caso, es mejor recordar una buena for looplógica pasada de moda . Simplemente use i! Para mantener el índice apropiado, solo resta de icada eliminación de un elemento de matriz.
Aquí está mi ejemplo simple y funcional :
$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--;
}
}
Saldrá:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Esto puede tener muchas implementaciones simples. Por ejemplo, mi caso exacto requería mantener el último elemento en una matriz basado en valores multidimensionales. Te mostraré lo que quiero decir:
$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);
}
}
}
}
Saldrá:
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"
}
}
Como puede ver, manipulo $ i antes del empalme ya que estoy buscando eliminar el elemento anterior, en lugar del presente.