使用指定范围内的键获取数组值 - PHP 5.5
Grab array values with keys in specified range - PHP 5.5
在任意顺序和键的数组中,如下
$myArray = array(
1 => 'foo',
4 => 'bar',
6 => 'foobar',
24 => 'barfoo',
30 => 'fizz',
35 => 'buzz',
50 => 'fizzbuzz'
);
如何通过键范围获取数组的一部分,例如,键在 5 到 40 之间的每个项目
类似于array_range($myArray, 5, 40);
预期输出:array(6 => 'foobar', 24 => 'barfoo', 30 => 'fizz', 35 => 'buzz')
这类似于 How to use array_filter() to filter array keys? 但在这种情况下,我仅限于 PHP 5.5.
在数组中定义一系列键,然后计算键的交集:
$range = array_flip(range(5, 40));
$result = array_intersect_key($myArray, $range);
一个班轮:
$result = array_intersect_key($myArray, array_flip(range(5, 40)));
可选地填充范围数组(我只是先想到另一个,它更短):
$range = array_fill_keys(range(5, 40), 1);
如果您想要特定的键而不是范围,只需定义一个键或值数组并翻转:
$range = array_flip(array(6, 24, 50));
//or
$range = array(6=>1, 24=>1, 50=>1);
如果 PHP 版本低于 5.6,升级您的 PHP 版本 - 5.5 is not even supported any longer. If you can't upgrade PHP, then clearly 是要使用的版本。
这需要PHP 5.6+,但在问题中明确PHP版本之前已经回答了,所以我会留作参考。
使用 array_filter - 只要 PHP 版本高于 5.6:
$allowed_range = [ 'min' => 5, 'max' => 40 ];
$filtered = array_filter(
$myArray,
function ( $key ) use ( $allowed_ranged ) {
return ( $key >= $allowed_range[ 'min' ] && $key <= $allowed_range[ 'max' ] );
},
ARRAY_FILTER_USE_KEY
);
只是迭代数组,并使用条件构建过滤数组(这里假设包含范围):
<?php
$in = array(
1 => 'foo',
4 => 'bar',
6 => 'foobar',
24 => 'barfoo',
30 => 'fizz',
35 => 'buzz',
50 => 'fizzbuzz'
);
$out = [];
foreach($in as $k => $v)
{
if($k >= 5 && $k <= 40) {
$out[$k] = $v;
}
}
var_dump($out);
输出:
array (size=4)
6 => string 'foobar' (length=6)
24 => string 'barfoo' (length=6)
30 => string 'fizz' (length=4)
35 => string 'buzz' (length=4)
在任意顺序和键的数组中,如下
$myArray = array(
1 => 'foo',
4 => 'bar',
6 => 'foobar',
24 => 'barfoo',
30 => 'fizz',
35 => 'buzz',
50 => 'fizzbuzz'
);
如何通过键范围获取数组的一部分,例如,键在 5 到 40 之间的每个项目
类似于array_range($myArray, 5, 40);
预期输出:array(6 => 'foobar', 24 => 'barfoo', 30 => 'fizz', 35 => 'buzz')
这类似于 How to use array_filter() to filter array keys? 但在这种情况下,我仅限于 PHP 5.5.
在数组中定义一系列键,然后计算键的交集:
$range = array_flip(range(5, 40));
$result = array_intersect_key($myArray, $range);
一个班轮:
$result = array_intersect_key($myArray, array_flip(range(5, 40)));
可选地填充范围数组(我只是先想到另一个,它更短):
$range = array_fill_keys(range(5, 40), 1);
如果您想要特定的键而不是范围,只需定义一个键或值数组并翻转:
$range = array_flip(array(6, 24, 50));
//or
$range = array(6=>1, 24=>1, 50=>1);
如果 PHP 版本低于 5.6,升级您的 PHP 版本 - 5.5 is not even supported any longer. If you can't upgrade PHP, then clearly
这需要PHP 5.6+,但在问题中明确PHP版本之前已经回答了,所以我会留作参考。
使用 array_filter - 只要 PHP 版本高于 5.6:
$allowed_range = [ 'min' => 5, 'max' => 40 ];
$filtered = array_filter(
$myArray,
function ( $key ) use ( $allowed_ranged ) {
return ( $key >= $allowed_range[ 'min' ] && $key <= $allowed_range[ 'max' ] );
},
ARRAY_FILTER_USE_KEY
);
只是迭代数组,并使用条件构建过滤数组(这里假设包含范围):
<?php
$in = array(
1 => 'foo',
4 => 'bar',
6 => 'foobar',
24 => 'barfoo',
30 => 'fizz',
35 => 'buzz',
50 => 'fizzbuzz'
);
$out = [];
foreach($in as $k => $v)
{
if($k >= 5 && $k <= 40) {
$out[$k] = $v;
}
}
var_dump($out);
输出:
array (size=4)
6 => string 'foobar' (length=6)
24 => string 'barfoo' (length=6)
30 => string 'fizz' (length=4)
35 => string 'buzz' (length=4)