Pregunta Arreglo de PHP por valor (no clave)


Tengo una matriz de PHP de la siguiente manera:

$messages = [312, 401, 1599, 3, ...];

Quiero eliminar el elemento que contiene el valor $del_val (por ejemplo, $del_val=401), pero no sé su clave. Esto podría ayudar: cada valor solo puede estar allí una vez.

Estoy buscando la función más simple para realizar esta tarea, por favor.


665
2017-08-29 00:44


origen


Respuestas:


Utilizando array_search() y unset, intente lo siguiente:

if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search() devuelve la clave del elemento que encuentra, que puede usarse para eliminar ese elemento de la matriz original usando unset(). Regresará FALSE en caso de falla, sin embargo, puede devolver un valor falso-y en caso de éxito (su clave puede ser 0 por ejemplo), por lo que la comparación estricta !== operador es usado

los if() declaración verificará si array_search() devolvió un valor, y solo realizará una acción si lo hiciera.


1240
2017-08-29 00:53



Bueno, borrar un elemento de una matriz básicamente es solo establecer la diferencia con un elemento.

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

Se generaliza muy bien, puede eliminar tantos elementos como desee al mismo tiempo, si lo desea.

Renuncia: Tenga en cuenta que mi solución produce una nueva copia de la matriz, manteniendo intacta la antigua, en contraste con la respuesta aceptada que muta. Puede ser un poco más lento debido a esto.


473
2018-05-04 19:41



Una forma interesante es usar array_keys():

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

los array_keys() función toma dos parámetros adicionales para devolver solo las claves para un valor particular y si se requiere una verificación estricta (es decir, utilizando === para la comparación).

Esto también puede eliminar múltiples elementos de la matriz con el mismo valor (p. [1, 2, 3, 3, 4])


96
2017-08-16 07:36



Si sabes definitivamente que tu matriz contendrá solo un elemento con ese valor, puedes hacer

$key = array_search($del_val, $array);
if (false !== $key) {
    unset($array[$key]);
}

Sin embargo, si su valor puede aparecer más de una vez en su matriz, podría hacerlo

$array = array_filter($array, function($e) use ($del_val) {
    return ($e !== $del_val);
});

Nota: La segunda opción solo funciona para PHP5.3 + con Cierres


43
2017-08-29 00:56



$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);

35
2017-08-01 17:26



Echa un vistazo al siguiente código:

$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');

Tu puedes hacer:

$arr = array_diff($arr, array('remove_me', 'remove_me_also'));

Y eso te conseguirá esta matriz:

array('nice_item', 'another_liked_item')

22
2018-03-16 12:47



Con el siguiente código, los valores repetitivos se eliminarán de los $ mensajes.

$messages = array_diff($messages, array(401));


18
2018-01-02 03:33



La mejor manera es array_splice

array_splice($array, array_search(58, $array ), 1);

La razón de Best está aquí en http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/


16
2018-04-23 13:34