Учитывая массив как:
$arr = array(
'key' => 'foo'
'key2' => 'bar',
0 => 'num_foo',
1 => 'num_bar'
);
Как извлечь значения до 0 & 1? (Помимо использования для цикла). Может быть, любая стандартная функция делает работу?
Если вы используете версию PHP> = 5.6, вы можете использовать array_filter
, с флагом, который говорит ему передать ключ в функцию обратного вызова.
$arr = array(
'key' => 'foo',
'key2' => 'bar',
0 => 'num_foo',
1 => 'num_bar'
);
$new_array = array_filter($arr, function($key) {
return is_numeric($key);
}, ARRAY_FILTER_USE_KEY);
var_dump($new_array);
Редактировать: как указал Робби, используя is_numeric
это лучший выбор здесь. (Ранее мой пример использовал is_int
.)
Редактировать 2: Возможно is_int
на самом деле лучший выбор здесь. is_numeric
вернул бы true для таких значений, как +0123.45e6
или шестнадцатеричные / двоичные числовые обозначения, а также — не уверен, что это желательно.
is_int
обычно возвращает false для значения, такого как '1'
, Это работает здесь, потому что мы имеем дело с массивами — и PHP автоматически преобразует ключи массива в целочисленные, если они являются «целочисленной строкой».
ты можешь использовать array_filter()
вернуть числовые ключи
// $Your_array is your original array with numeric and string keys
// array_filter() returns an array of the numeric keys
$numerickeys = array_filter(array_keys($Your_array), function($k) {return is_int($k);});
// this is a 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($Your_array), 'is_int');
Если вы используете is_int()
внутри foreach
петля это достаточно просто. Попробуй это:
foreach ($arr as $key => $value) {
if (is_int($key)) {
echo "Found integer key with value: $value\n";
}
}
Если вы отчаянно хотите избежать использования цикла, попробуйте это:
array_walk($arr, function($val, $key) {
if (is_int($key)) {
echo "Found integer key with value: $val\n";
}
});
Это, конечно, в любом случае использует цикл внутри.