Ray S.
Ray S.

Reputation: 1200

array_slice by two associative indexes

what is the simplest way to get an array slice between two associative keys in PHP?

for example, for the array

$arr = array('2012-02-01'=> 'bla blah',
'2012-02-02'=> 'bla blah',
'2013-02-03'=> 'bla blah',
'2012-02-04'=> 'bla blah',
'2012-02-05'=> 'bla blah',
'2010-03-06'=> 'bla blah',
'2012-04-07'=> 'bla blah',
'2012-01-08'=> 'bla blah',
'2012-02-09'=> 'bla blah',
'2012-10-10'=> 'bla blah',
'2012-12-03'=> 'bla blah');

How can one get a slice of everything between key: '2012-02-04' and key '2012-04-07' which would be:

array('2012-02-04'=> 'bla blah',
'2012-02-05'=> 'bla blah',
'2010-03-06'=> 'bla blah',
'2012-04-07'=> 'bla blah')

Upvotes: 0

Views: 1244

Answers (1)

Mark Baker
Mark Baker

Reputation: 212412

As long as you're certain that both keys are in the array:

$arr = array(
    '2012-02-01'=> 'bla blah',
    '2012-02-02'=> 'bla blah',
    '2013-02-03'=> 'bla blah',
    '2012-02-04'=> 'bla blah',
    '2012-02-05'=> 'bla blah',
    '2010-03-06'=> 'bla blah',
    '2012-04-07'=> 'bla blah',
    '2012-01-08'=> 'bla blah',
    '2012-02-09'=> 'bla blah',
    '2012-10-10'=> 'bla blah',
    '2012-12-03'=> 'bla blah'
);
$startKey = '2012-02-04';
$endKey = '2012-02-07';

$new = array_slice(
    $arr,
    array_search($startKey, array_keys($arr)),
    array_search($endKey, array_keys($arr)) - 
        array_search($startKey, array_keys($arr)) + 1
);
var_dump($new);

else you'll need to do a bit of validation on the returns from the array_search() calls before doing the array_slice()

Upvotes: 2

Related Questions