Ho una matrice con 2 tipi di chiavi, stringhe e numeri interi. Voglio fare foreach()
su questo array e voglio farlo solo per i tasti numerici. Qual è il modo più elegante per farlo?tasti numerici di destinazione solo nell'array
risposta
Ecco un metodo complicato utilizzando array_filter()
per restituire i tasti numerici, quindi iterare su di essi.
// $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']
}
E 'molto più facile anche se per foreach poco più di tutto:
foreach ($input_array as $key => $val) {
if (is_int($key)) {
// do stuff
}
}
Modifica Misread post originale e ho pensato che ho visto "numerico", piuttosto che i tasti "integer". Aggiornato per utilizzare is_int()
anziché is_numeric()
.
La funzione anonima in 'array_filter' potrebbe essere sostituita dalla stringa' 'is_int'' :) –
@Jack Grazie per aver trovato una risposta antica. Risposta espansa. –
Ma quanto pensi che pensi possa essere efficace? Molte volte peggio di 'foreach (*) {if (is_int) (do stuff;)}' O più o meno lo stesso? In base alla descrizione della funzione, dovrei dire che questo è almeno 2 volte più intensivo del processore, e che non sta nemmeno prendendo in considerazione la creazione di una variabile completamente nuova. – Jonathon
foreach($array as $key => $val) {
if(!is_int($key))
continue;
// rest of the logic
}
Semanticamente, 'is_int()' è diverso da 'is_numeric()'. –
sì è diverso ma OP detto interi. – Ehtesham
È vero, lo fanno (ed è possibile che 'int' sia ciò che intendevano in pratica). Tuttavia, 'numerico' è usato più volte, incluso il titolo della domanda. –
Utilizzando array_filter è necessario sapere se si dispone di un valore simile a FALSE.
Questa è la mia soluzione:
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);
Risultato di 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 & tasti numerici rinumerazione
- 2. PHP corregge i tasti numerici nell'array
- 3. unire due array, mantenendo i tasti numerici
- 4. come prevenire array_merge rinumerare tasti numerici
- 5. ordina una matrice e assegna nuovi tasti numerici?
- 6. Mappa con solo determinati tasti
- 7. Come selezionare solo dati numerici da mysql?
- 8. Javascript Funzione per inserire solo alfabeti sulla pressione dei tasti
- 9. Rails 3 - Rendi campo di testo accetta solo valori numerici
- 10. Onhashchange con i tasti del browser solo
- 11. Verifica Se sono stati immessi solo valori numerici nell'input. (JQuery)
- 12. SQL prendere solo i valori numerici da un varchar
- 13. Limita l'input NSTextField a solo valori numerici? NSNumberformatter
- 14. Interrogare solo valori numerici il più presto possibile
- 15. UseDestinationValue solo quando la proprietà di destinazione non è null
- 16. _.assegnare solo se la proprietà esiste nell'oggetto di destinazione
- 17. Come verificare se una stringa contiene solo cifre/caratteri numerici
- 18. controllare se un array contiene (solo valori numerici)
- 19. Come rimuovere i valori da un array mentre rinumerazione tasti numerici
- 20. Array PHP con tasti numerici poiché la stringa non può essere utilizzata
- 21. Disabilitazione tasti sulla tastiera
- 22. Estrazione dati numerici pitone
- 23. Rende modificabile solo la destinazione del collegamento in MailChimp
- 24. Come configurare una destinazione NLog per registrare solo eccezioni?
- 25. StackExchange.Redis come interrogare tutti i tasti solo su un db
- 26. Intervallo di valori numerici validi
- 27. Perché i letterali numerici non hanno accesso ai metodi numerici?
- 28. Modello di classe per tipi numerici
- 29. Validazione di argomenti numerici in Clojure
- 30. Rilevamento di combinazioni di tasti
Onestamente mi piacerebbe utilizzare un ciclo for, invece. – BoltClock
Hai ottenuto questo array attraverso 'mysql_fetch_array' per caso? Se è così, puoi dire di restituire solo un array numerico. –
si dovrà iterare l'intero array e verificare se la chiave non è numerica, non fare nulla e continuare. – Ehtesham