Quiero recorrer una matriz con foreach
para verificar si existe un valor. Si el valor existe, quiero eliminar el elemento que lo contiene.
Tengo el siguiente código:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
No sé cómo eliminar el elemento una vez que se encuentra el valor. ¿Cómo lo elimino?
Tengo que usar foreach
para este problema. Probablemente hay alternativas foreach
, y puedes compartirlas.
$key => &$tag_name
stackoverflow.com/a/2008893/922522json_encode()
. Puedes resolver esto$display_related_tags = array_values ($display_related_tags);
después delforeach
ciclo.$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
que convierte el resultado en objeto.Una mejor solución es usar la
array_filter
función:Como dice la documentación de php :
fuente
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
Dicho esto, leer la respuesta nuevamente en este caso, por supuesto, no importaría como usted afirma.display_related_tags = array_values(display_related_tags);
después.fuente
En lugar de hacer el bucle foreach () en la matriz, sería más rápido usar array_search () para encontrar la clave adecuada. En matrices pequeñas, usaría foreach para una mejor lectura, pero para matrices más grandes, o código ejecutado a menudo, esto debería ser un poco más óptimo:
Se necesita el operador de comparación estricto! ==, porque array_search () puede devolver 0 como el índice de $ unwantedValue.
Además, el ejemplo anterior eliminará solo el primer valor $ unwantedValue, si $ unwantedValue puede aparecer más de una vez en $ array, debe usar array_keys (), para encontrarlos todos:
Consulte http://php.net/manual/en/function.array-search.php para obtener más información.
fuente
Si tiene un escenario en el que debe eliminar más de un valor de la matriz foreach, en este caso debe pasar el valor por referencia para cada uno: intento explicar este escenario:
en el segundo bucle que desea desarmar, las entradas de los primeros bucles no vuelven a aparecer en la iteración para fines de rendimiento o, de lo contrario, también se desarman de la memoria porque en la memoria se presentan y vendrán en iteraciones.
fuente
Ya hay respuestas que están dando luz sobre cómo desarmar. En lugar de repetir el código en todas sus clases, haga que funcione como se muestra a continuación y úselo en el código cuando sea necesario. En la lógica de negocios, a veces no desea exponer algunas propiedades. Consulte a continuación una llamada de línea para eliminar
Llamar como:
fuente
Como ya se mencionó, querría hacer un foreach con la clave y desarmarla usando la clave, pero tenga en cuenta que mutar una matriz durante la iteración es en general una mala idea, aunque no estoy seguro de las reglas de PHP sobre esto de improviso.
fuente
foreach
ofor
construcciones en lugar de iteraciones en general?