Как извлечь значения массива только с помощью цифровых ключей?

Учитывая массив как:

$arr = array(
'key' => 'foo'
'key2' => 'bar',
0 => 'num_foo',
1 => 'num_bar'

);

Как извлечь значения до 0 & 1? (Помимо использования для цикла). Может быть, любая стандартная функция делает работу?

0

Решение

Если вы используете версию 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);

https://3v4l.org/qfar9


Редактировать: как указал Робби, используя is_numeric это лучший выбор здесь. (Ранее мой пример использовал is_int.)


Редактировать 2: Возможно is_int на самом деле лучший выбор здесь. is_numeric вернул бы true для таких значений, как +0123.45e6или шестнадцатеричные / двоичные числовые обозначения, а также — не уверен, что это желательно.

is_int обычно возвращает false для значения, такого как '1', Это работает здесь, потому что мы имеем дело с массивами — и PHP автоматически преобразует ключи массива в целочисленные, если они являются «целочисленной строкой».

2

Другие решения

ты можешь использовать 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');
1

Если вы используете 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";
}
});

Это, конечно, в любом случае использует цикл внутри.

0
По вопросам рекламы [email protected]