Tengo una matriz con 2 tipos de claves, cadenas y enteros. Quiero hacer foreach()
en esta matriz y quiero hacerlo solo para las teclas numéricas. ¿Cuál es la forma más elegante de hacerlo?teclas numéricas de destino solo en la matriz
Respuesta
Aquí hay un método complicado que usa array_filter()
para devolver las teclas numéricas y luego iterar sobre ellas.
// $input_array is your original array with numeric and string keys
// array_filter() returns an array of the numeric keys
// Use an anonymous function if logic beyond a simple built-in filtering function is needed
$numerickeys = array_filter(array_keys($input_array), function($k) {return is_int($k);});
// But in this simple case where the filter function is a plain
// built-in function requiring one argument, it can be passed as a string:
// Really, this is all that's needed:
$numerickeys = array_filter(array_keys($input_array), 'is_int');
foreach ($numerickeys as $key) {
// do something with $input_array[$key']
}
Es mucho más fácil sin embargo sólo forEach sobre todas las cosas:
foreach ($input_array as $key => $val) {
if (is_int($key)) {
// do stuff
}
}
Editar Misread post original y pensó que vi "numérico" claves "entero" en lugar de. Se actualizó para usar is_int()
en lugar de is_numeric()
.
La función anónima en 'array_filter' podría reemplazarse por la cadena' 'is_int'' :) –
@Jack Gracias por descubrir una antigua respuesta. Respuesta expandida. –
¿Pero cuán eficiente crees que podría ser esto? Muchas veces peor que 'foreach (*) {if (is_int) (do stuff;)}' ¿O casi lo mismo? De acuerdo con la descripción de la función, tendría que decir que esto es al menos 2 veces más intensivo en el procesador, y eso ni siquiera tiene en cuenta la creación de una variable completamente nueva. – Jonathon
foreach($array as $key => $val) {
if(!is_int($key))
continue;
// rest of the logic
}
Semánticamente, 'is_int()' es diferente de 'is_numeric()'. –
sí, es diferente pero OP dice enteros. – Ehtesham
Cierto, lo hacen (y es posible que 'int' sea lo que querían decir en la práctica). Sin embargo, 'numérico' se usa varias veces, incluido el título de la pregunta. –
Al utilizar array_filter debe saber si tiene un valor tan similar como FALSE.
Esta es mi solución:
function filterArrayKeyInteger(Array $array) {
$integer = array_filter($array, function ($key) {
if ($key === 0 || is_int($key)) {
return true;
}
}, ARRAY_FILTER_USE_KEY);
return array_intersect_key($array, $integer);
}
$a = [0, false, 'aa','bb', 'cc', 'dd' => 'dd', '9.9' => 9.9];
$b = filterArrayKeyInteger($a);
Resultado de vardump
var_dump(a): array(7) {
[0]=>
int(0)
[1]=>
bool(false)
[2]=>
string(2) "aa"
[3]=>
string(2) "bb"
[4]=>
string(2) "cc"
["dd"]=>
string(2) "dd"
["9.9"]=>
float(9.9)
}
var_dump(b): array(5) {
[0]=>
int(0)
[1]=>
bool(false)
[2]=>
string(2) "aa"
[3]=>
string(2) "bb"
[4]=>
string(2) "cc"
}
- 1. array_diff y teclas numéricas renumeración
- 2. casting una matriz con teclas numéricas como un objeto
- 3. PHP array_merge con las teclas numéricas
- 4. Cómo eliminar los valores de una matriz, mientras que la renumeración de teclas numéricas
- 5. matriz de PHP con teclas numéricas ya que la cadena no se puede usar
- 6. fusionar dos matrices, mientras se mantienen las teclas numéricas
- 7. cómo prevenir array_merge volver a numerar las teclas numéricas
- 8. REDIS: Teclas numéricas (1,2,3 ..) frente a las teclas comprimidas (A9z3, A9z4 ..)?
- 9. matriz de objetos numerados de matrices numéricas
- 10. Restablecer las teclas de matriz en matriz multidimensional
- 11. matriz unsetting teclas
- 12. teclas matriz dinámica
- 13. gama Cómo volver a introducir con las teclas numéricas no secuenciales
- 14. Mapa con solo ciertas teclas
- 15. PHP Obtenga todas las claves numéricas/anónimas en una matriz
- 16. PHP corrige claves numéricas en el array
- 17. UseDestinationValue solo cuando la propiedad de destino no es nula
- 18. Uso de pyhook para responder a la combinación de teclas (no solo teclas)
- 19. Bibliotecas Java numéricas
- 20. Detectar varias teclas en un solo evento de pulsación de teclas en jQuery
- 21. Twig olvida las teclas de matriz
- 22. ordenar una matriz y asignar nuevas claves numéricas?
- 23. Chrome reordenando las teclas del objeto si son numéricas, es normal/esperado
- 24. Normalizar el caso de las teclas de matriz en PHP
- 25. Cómo eliminar el prefijo en las teclas de matriz
- 26. comparaciones numéricas en datos de la columna de cuerda
- 27. Ayuda en relleno de cadenas numéricas
- 28. Análisis flexible de cadenas numéricas en Python
- 29. PHP eliminar comas de cadenas numéricas
- 30. PHP cambiar el nombre de las teclas de matriz en matriz multidimensional
Honestamente que haría uso de un bucle en su lugar. – BoltClock
¿Obtuviste esta matriz a través de 'mysql_fetch_array' por casualidad? Si es así, puede decirle que solo devuelva una matriz numérica. –
tendrá que iterar toda la matriz y comprobar si la clave no es numérica simplemente no hacer nada y continuar. – Ehtesham