¿Cómo elimino un elemento de una matriz cuando conozco el nombre del elemento? por ejemplo:
Tengo una matriz:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
el usuario ingresa strawberry
strawberry
es removido.
Para explicar completamente:
Tengo una base de datos que almacena una lista de elementos separados por una coma. El código extrae la lista en función de una elección del usuario donde se encuentra esa opción. Entonces, si eligen la fresa, codifican las entradas en cada entrada donde se encuentra la fresa y luego la convierte en una matriz usando split (). Quiero que eliminen los elementos elegidos por el usuario, por ejemplo, fresa, de la matriz.
Respuestas:
Use
array_search
para obtener la clave y eliminarlaunset
si se encuentra:array_search
devuelve falso ( nulo hasta PHP 4.2.0) si no se ha encontrado ningún elemento.Y si puede haber varios elementos con el mismo valor, puede usar
array_keys
para obtener las claves de todos los elementos:fuente
$submenuArray
? (Tenga en cuenta que con cada ciclo$submenuArray
se sobrescribirá).Uso
array_diff()
para solución de 1 línea:... No se necesitan funciones adicionales ni bucles foreach.
fuente
strawberry
no está en la matriz inicial, estará disponible en la$array_without_strawberries
matriz: código peligroso si desea asegurarse de que un elemento dado no esté en una matriz.$a = array_diff(array(), array('strawberry'));
- $ a es una matriz vacía.fuente
$my_array = array_values($my_array);
.in_array
yarray_search
). Usar el retorno dearray_search
como en la respuesta de Gumbo es más efectivoSi está utilizando una matriz simple aquí (que parece ser el caso), debería usar este código en su lugar:
unset($array[$key])
solo elimina el elemento pero no reordena la matriz simple.Supongamos que tenemos una matriz y usamos array_splice:
En comparación con sin configurar:
Observe cómo
unset($array[$key])
no reordena la matriz.fuente
unset
no devuelve nada. Porjson_encode(unset($array[2]))
lo tanto, no es apropiado para una comparación.Puede usar el filtro de matriz para eliminar los elementos por una condición específica en
$v
:fuente
array_filter()
. Si bien personalmente usaría una función anónima en mi implementación, creo que la acción correcta en SO sería comentar o editar la respuesta de D.Martin si desea hacer una micro mejora para que esta página no se hinche. Por favor, elimine esta respuesta duplicada.Será así:
fuente
Esta es una simple reiteración que puede eliminar múltiples valores en la matriz.
fuente
array_diff()
. ¿Cómo obtuvo esto tres votos a favor? Nadie debería encontrar esta respuesta útil o usarla en sus propios proyectos. Recomiendo eliminar esta respuesta; esto serviría para liberar su cuenta de una respuesta de baja calidad, reducir la hinchazón de respuestas en esta página y obtener una insignia disciplinada. Pospondré mi voto negativo para que tenga tiempo de eliminarlo para obtener una recompensa.Solo puedes hacer una sola línea. Se eliminará el elemento de la matriz
fuente
Actualmente estoy usando esta función:
Puede ingresar una matriz o solo una cadena con los elementos que deben eliminarse. Escríbelo así:
O
$detils = array_delete('orange', $detils);
También lo reindexará.
fuente
Esta pregunta tiene varias respuestas, pero quiero agregar algo más porque cuando usé
unset
oarray_diff
tuve varios problemas para jugar con los índices de la nueva matriz cuando se eliminó el elemento específico (porque se guardan los índices iniciales)Vuelvo al ejemplo:
o
Si imprime el resultado obtendrá:
Resultado:
Pero los índices se guardarán y, por lo tanto, accederá a su elemento como:
Y así, la matriz final no se vuelve a indexar. Por lo tanto, debe agregar después de
unset
oarray_diff
:Después de eso, su matriz tendrá un índice normal:
Relacionado con esta publicación: Re-Index Array
Espero que ayude
fuente
Un mejor enfoque podría ser mantener sus valores como claves en una matriz asociativa, y luego recurrir
array_keys()
a ella cuando desee una matriz real. De esa manera no necesita usararray_search
para encontrar su elemento.fuente
La respuesta a la eliminación de la matriz PHP por valor (no clave) Dada por https://stackoverflow.com/users/924109/rok-kralj
IMO es la mejor respuesta ya que elimina y no muta
Se generaliza muy bien, puede eliminar tantos elementos como desee al mismo tiempo, si lo desea.
Descargo de responsabilidad: tenga en cuenta que mi solución produce una nueva copia de la matriz mientras mantiene intacta la anterior en contraste con la respuesta aceptada que muta. Puede ser un poco más lento debido a esto.
fuente
Estaba buscando la respuesta a la misma pregunta y encontré este tema. Veo dos formas principales: la combinación de
array_search
&unset
y el uso dearray_diff
. A primera vista, me pareció que el primer método sería más rápido, ya que no requiere la creación de una matriz adicional (como cuando se usaarray_diff
). ¡Pero escribí un pequeño punto de referencia y me aseguré de que el segundo método no solo sea más conciso, sino también más rápido! Me alegra compartir esto contigo. :)https://glot.io/snippets/f6ow6biaol
fuente
Preferiría usar array_key_exists para buscar claves en matrices como:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
para encontrar el especificado de manera efectiva, ya que array_search e in_array () no funcionan aquí. Y elimine cosas con unset () .
Creo que ayudará a alguien.
fuente
Crear matriz numérica con eliminar un valor de matriz particular
Puedes referir este enlace.
fuente
fuente
Usando
array_seach()
, intente lo siguiente:array_search()
devuelve la clave del elemento que encuentra, que puede usarse para eliminar ese elemento de la matriz original usandounset()
. VolveráFALSE
en caso de falla, sin embargo, puede devolver un valor "falsey" en caso de éxito (su clave puede ser,0
por ejemplo), razón por la cual se utiliza el!==
operador de comparación estricta .La
if()
declaración verificará siarray_search()
devuelve un valor y solo realizará una acción si lo hizo.fuente
fuente
array_search()
-unset()
método ya fue publicada por John Conde años antes que la suya. Las respuestas duplicadas no tienen valor para los lectores y en realidad son un inconveniente debido al tiempo perdido al desplazarse y leer información redundante. Por favor borra esta respuesta.fuente
fuente
fuente