20

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));

当前函数参数:

array_slice ( $array, $offset, $length, $preserve_keys) 

我需要这样的东西:

array_slice ( $array, **$key**, $length, $preserve_keys) 

根据上面的 print_r 输出:

array (
   100 => aa,
   101 => bb,
   102 => cc
)
4

3 回答 3

19

要查找键的偏移量,请使用array_search()搜索键,可以使用 检索array_keys()。 当数组 ( ) 中不存在指定的键 ( ) 时array_search()将返回。FALSE100$a

$key = array_search(100, array_keys($a), true);
if ($key !== false) {
    $slice = array_slice($a, $key, null, true);
    var_export($slice);
}

印刷:

array (
  100 => 'aa',
  101 => 'bb',
  102 => 'cc',
)
于 2013-05-22T19:21:21.700 回答
4

返回$array其键的部分存在于数组中$keys

array_intersect_key($array,array_flip($keys));
于 2019-08-07T13:17:03.333 回答
3

替代解决方案

如果您想通过使用您想要获取的项目的键对数组进行切片,您可以使用以下自定义函数来执行此操作:

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'));
    }
}

用法:

$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') );

结果:

Array
(
    [key2] => b
    [key3] => c
    [key5] => e
)
于 2018-03-26T22:32:49.393 回答