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)