How to slice an array by key, not offset? How to slice an array by key, not offset? php php

How to slice an array by key, not offset?


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

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


Returns parts of $array whose keys exist in the array $keys:

array_intersect_key($array,array_flip($keys));


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)