PHP function array_slice() returns sequence of elements by offset like this:
PHP函数array_slice()按偏移量返回元素序列,如下所示:
// sample data
$a = array('a','b','c',100=>'aa',101=>'bb',102=>'cc');
// outputs empty array because offset 100 not defined
print_r(array_slice($a,100));
Current function arguments:
当前函数参数:
array_slice ( $array, $offset, $length, $preserve_keys)
I need something like this:
我需要这样的东西:
array_slice ( $array, **$key**, $length, $preserve_keys)
That outputs this according to above print_r:
根据上面的print_r输出:
array (
100 => aa,
101 => bb,
102 => cc
)
2 个解决方案
#1
13
To find the offset of the key, use array_search()
to search through the keys, which can be retrieved with array_keys()
. array_search()
will return FALSE
when the specified key (100
) is not present in the array ($a
).
要查找键的偏移量,请使用array_search()搜索键,可以使用array_keys()检索键。当数组($ a)中没有指定的键(100)时,array_search()将返回FALSE。
$key = array_search(100, array_keys($a), true);
if ($key !== false) {
$slice = array_slice($a, $key, null, true);
var_export($slice);
}
Prints:
打印:
array (
100 => 'aa',
101 => 'bb',
102 => 'cc',
)
#2
0
Alternative solution
If you want to slice the array by using keys for the items you want to get, you could use the following custom function to do so:
如果要使用要获取的项的键来对阵列进行切片,可以使用以下自定义函数来执行此操作:
function array_slice_keys($array, $keys = null) {
if ( empty($keys) ) {
$keys = array_keys($array);
}
if ( !is_array($keys) ) {
$keys = array($keys);
}
if ( !is_array($array) ) {
return array();
} else {
return array_intersect_key($array, array_fill_keys($keys, '1'));
}
}
Usage:
用法:
$ar = [
'key1' => 'a',
'key2' => 'b',
'key3' => 'c',
'key4' => 'd',
'key5' => 'e',
'key6' => 'f',
];
// Get the values from the array with these keys:
$items = array_slice_keys( $ar, array('key2', 'key3', 'key5') );
Result:
结果:
Array
(
[key2] => b
[key3] => c
[key5] => e
)
#1
13
To find the offset of the key, use array_search()
to search through the keys, which can be retrieved with array_keys()
. array_search()
will return FALSE
when the specified key (100
) is not present in the array ($a
).
要查找键的偏移量,请使用array_search()搜索键,可以使用array_keys()检索键。当数组($ a)中没有指定的键(100)时,array_search()将返回FALSE。
$key = array_search(100, array_keys($a), true);
if ($key !== false) {
$slice = array_slice($a, $key, null, true);
var_export($slice);
}
Prints:
打印:
array (
100 => 'aa',
101 => 'bb',
102 => 'cc',
)
#2
0
Alternative solution
If you want to slice the array by using keys for the items you want to get, you could use the following custom function to do so:
如果要使用要获取的项的键来对阵列进行切片,可以使用以下自定义函数来执行此操作:
function array_slice_keys($array, $keys = null) {
if ( empty($keys) ) {
$keys = array_keys($array);
}
if ( !is_array($keys) ) {
$keys = array($keys);
}
if ( !is_array($array) ) {
return array();
} else {
return array_intersect_key($array, array_fill_keys($keys, '1'));
}
}
Usage:
用法:
$ar = [
'key1' => 'a',
'key2' => 'b',
'key3' => 'c',
'key4' => 'd',
'key5' => 'e',
'key6' => 'f',
];
// Get the values from the array with these keys:
$items = array_slice_keys( $ar, array('key2', 'key3', 'key5') );
Result:
结果:
Array
(
[key2] => b
[key3] => c
[key5] => e
)