考虑如下阵列:
$arr = array(
'key' => 'foo'
'key2' => 'bar',
0 => 'num_foo',
1 => 'num_bar'
);
如何提取0和0以下的值1? (除了使用for循环)。也许任何标准功能都可以完成这项工作?
答案 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);
编辑:正如罗比指出的那样,使用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";
}
}
当然,无论如何都要在内部使用循环。