PHP, Obtener todos los items de un array después de un determinado item?

Publicado por Keygured
hace 7 años

Hola a todos. Tengo un array como este:

$hard = {
    ["modeloMS1"]=> "xxx",
    ["modeloMS2"]=> "xxx",
    ["modeloMS3"]=> "xxx",
    ["modeloMS4"]=> "xxx",
    ["modeloMS5"]=> "zzz"
}

Yo sé que puedo borrar un elemento del array haciendo por ejemplo unset($hard['modelMS3']). Pero cómo podría hacer para borrar todos los items que le siguen? Especificarle un item como modeloMS3 que de ahí para adelante se borren todos así me quedan solo los primeros dos items?

PHP
Respuesta de Cristian Olaz
hace 7 años

Hola. Bueno por empezar tu array está mal definido. Debería ser así:

$hard = [
    "modeloMS1" => "xxx",
    "modeloMS2" => "xxx",
    "modeloMS3" => "xxx",
    "modeloMS4" => "xxx",
    "modeloMS5" => "zzz"
];

Ahora eso podrías hacerlo con un ciclo, removiendo los elementos que no necesitás, o generando un nuevo array. Pero puede resultarte más cómodo usar las funciones que PHP ya trae para el manejo de arrays. En este caso la función array_slice lo que hace es extraer una porción de ese array. Para eso hay que especificarle el array en cuestión, el inicio y el final. Un problema es que esto funciona con índices numéricos y vos tenés un array asociativo. Entonces para resolver eso podés usar la función array_search que lo que hace es buscar la posición de un determinado valor en un array. Por ejemplo para encontrar la posición de la clave "modeloMS4 harías esto:

array_search('modeloMS4', array_keys($hard));  // retorna: 3

Luego en composición con array_slice, para quedarte con los dos primeros ítems podés hacer esto:

array_slice($hard, 0, array_search('modeloMS3', array_keys($hard));

Resultado:
[
    "modeloMS1" => "xxx",
    "modeloMS2" => "xxx
];

Espero te sirva. Saludos.