如何仅使用数字键提取数组值?
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);
编辑:正如 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');
考虑像这样的数组:
$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);
编辑:正如 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');