如何仅使用数字键提取数组值?

How to extract array values with numeric keys only?

考虑像这样的数组:

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

);

如何提取0和1以下的值? (除了使用 for 循环)。也许任何标准函数都能完成这项工作?

如果你在 foreach 循环中使用 is_int() 就很容易了。试试这个:

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";
    }
});

当然,这确实在内部使用了一个循环。

如果您使用的是 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


编辑:正如 Robbie 所指出的,使用 is_numeric 是更好的选择。 (之前我的示例使用 is_int。)


编辑 2:也许 is_int 实际上是更好的选择。 is_numeric 对于 +0123.45e6 或 hexadecimal/binary 数字符号等值会 return 为真——不确定是否需要。

对于 '1' 这样的值,

is_int 通常会 return 为假。它在这里起作用,因为我们正在处理数组 - PHP 自动将数组键转换为整数,如果它们是“整数字符串”。

您可以使用 array_filter() 到 return 数字键

// $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');