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

时间:2015-12-13 21:59:03

标签: php arrays extraction

考虑如下阵列:

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

);

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

3 个答案:

答案 0 :(得分:2)

如果您使用的是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或十六进制/二进制数字符号等值,+0123.45e6将返回true - 不确定是否需要。

is_int通常会为'1'等值返回false。它在这里工作,因为我们正在处理数组 - 如果它们是一个“整数字符串”,PHP会自动将数组键转换为整数。

答案 1 :(得分:1)

您可以使用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');

答案 2 :(得分:0)

如果您在import urllib, json, urllib2 url = 'http://localhost:9000/push/' # This packages the request (it doesn't make it) request = urllib2.Request(url) # Sends the request and catches the response response = urllib2.urlopen(request) data = json.load(response.read()) print data 循环中使用is_int(),这很容易。试试这个:

foreach

如果你拼命想避免使用循环,请尝试:

foreach ($arr as $key => $value) {
    if (is_int($key)) {
        echo "Found integer key with value: $value\n";
    }
}

当然,无论如何都要在内部使用循环。