Mam tablicę z 2 rodzajami kluczy, ciągów i liczb całkowitych. Chcę zrobić foreach()
w tej tablicy i chcę to zrobić tylko dla kluczy numerycznych. Jaki jest najbardziej elegancki sposób na zrobienie tego?docelowe klucze numeryczne tylko w tablicy
Odpowiedz
Oto skomplikowana metoda z użyciem array_filter()
w celu zwrócenia kluczy numerycznych, a następnie ich powtórzenia.
// $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']
}
Jest dużo łatwiej, choć tylko foreach nad wszystkim:
foreach ($input_array as $key => $val) {
if (is_int($key)) {
// do stuff
}
}
Edit misread oryginalny post i że widzę "numeryczny" zamiast klawiszy "całkowitych". Zaktualizowano, aby używać is_int()
zamiast is_numeric()
.
Anonimową funkcję w 'array_filter' można zastąpić ciągiem' 'is_int'' :) –
@Jack Dziękujemy za wykopanie starożytnej odpowiedzi. Odpowiedź rozszerzona. –
Ale jak skuteczne wydaje ci się, że to możliwe? Wiele razy gorzej niż "foreach (*) {if (is_int) (do stuff;)}" Lub o tym samym? Opierając się na opisie funkcji, musiałbym powiedzieć, że jest to co najmniej 2 razy więcej procesora, a to nawet nie bierze pod uwagę utworzenia zupełnie nowej zmiennej. – Jonathon
foreach($array as $key => $val) {
if(!is_int($key))
continue;
// rest of the logic
}
Semantycznie, 'is_int()' różni się od 'is_numeric()'. –
tak, różni się, ale OP mówi o liczbach całkowitych. – Ehtesham
To prawda, że tak (i jest możliwe, że "int" jest tym, co mieli na myśli w praktyce). Jednak "numeric" jest używany kilka razy, w tym tytuł pytania. –
Używając array_filter musisz wiedzieć, czy masz wartość podobną do FALSE.
To jest moje rozwiązanie:
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);
Wynik 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. Połącz dwie tablice, zachowując klucze numeryczne
- 2. Re indeksy tablicy klawisze numeryczne
- 3. dynamiczne klucze tablicy
- 4. klucze PHP tablicy wartości
- 5. Sprawdź Jeśli wprowadzono tylko wartości numeryczne. (JQuery)
- 6. Wypytuj tylko wartości numeryczne najwcześniejszej możliwej daty.
- 7. .NET Regex, tylko numeryczne, bez spacji
- 8. Zmień kolejność klucze tablicy php
- 9. Rewers wartości tablicy zachowując klucze
- 10. Jak dynamicznie ustawiać klucze tablicy w php
- 11. Jak zamieniać klucze z wartościami w tablicy?
- 12. dostać klucze dla zduplikowanych wartości w tablicy
- 13. Ciągi znaków jako klucze tablicy w javascript
- 14. Return tylko wartości tablicowe, które To klucze są w innym tablicy
- 15. Jak mogę filtrować tablicę skrótów, aby uzyskać tylko klucze w innej tablicy?
- 16. Ruby dostać klucze obiekt jako tablicy
- 17. PHP Rekurencyjnie wyodrębniaj klucze tablicy, jeśli pasuje
- 18. python JSON tylko klucze na pierwszym poziomie
- 19. Jak sprawdzić, czy ciąg zawiera tylko cyfry/znaki numeryczne?
- 20. Javascript: Getting wszystkie istniejące klucze w tablicy JSON
- 21. Jak połączyć klucze i wartości z tablicy w PHP
- 22. Numeryczne rozwiązywanie ODE w Pythonie
- 23. alfa-numeryczne w SQL Server
- 24. Numeryczne różnicowanie listy w Mathematica
- 25. Miejsce docelowe kompilacji Scala.js
- 26. Docelowe lokalizacje danych SSIS
- 27. Jak json_encode tablicy PHP, ale klucze bez cudzysłowów
- 28. Sprawdź elementy tablicy ciąg zawiera tylko elementy w innej tablicy
- 29. numeryczne biblioteki Scala
- 30. lsof wydrukuj numeryczne porty
Szczerze chciałbym użyć pętli for zamiast. – BoltClock
Czy macie tę tablicę przez 'mysql_fetch_array' przez przypadek? Jeśli tak, możesz powiedzieć, aby zwrócił tylko tablicę numeryczną. –
będziesz musiał powtórzyć całą tablicę i sprawdzić, czy klucz nie jest numeryczny, po prostu nie rób nic i kontynuuj. – Ehtesham