user7667047
user7667047

Reputation:

PHP create new array by slicing

I have an array type of 'months' => 'txt for ppl'

$timeArr = [
            '1' => '1 месяц',
            '3' => '3 месяца',
            '6' => '6 месяцев',
            '9' => '9 месяцев',
            '12' => '1 год',
            '18' => '1,5 года',
            '24' => '2 года',
            '36' => '3 года',
            '48' => '4 года',
            '60' => '5 лет',
            '72' => '6 лет',
            '84' => '7 лет',
            '120' => '10 лет',
            '180' => '15 лет',
            '240' => '20 лет',
            '300' => '25 лет',
            '360' => '30 лет',
        ];

My idea is make a function to return only period I want. For example, function period($from, $to): period(240, 360) will return array of key=> values from key '240' to key '360'. But I have no idea how to make it without loops.

Upvotes: 1

Views: 60

Answers (3)

Jaydeep Mor
Jaydeep Mor

Reputation: 1703

Try below code for get range array by key.

It returns range value and it's key from $timeArr.

PHP

<?php
function period($from,$to){
    $timeArr = [
        '1' => '1 месяц',
        '3' => '3 месяца',
        '6' => '6 месяцев',
        '9' => '9 месяцев',
        '12' => '1 год',
        '18' => '1,5 года',
        '24' => '2 года',
        '36' => '3 года',
        '48' => '4 года',
        '60' => '5 лет',
        '72' => '6 лет',
        '84' => '7 лет',
        '120' => '10 лет',
        '180' => '15 лет',
        '240' => '20 лет',
        '300' => '25 лет',
        '360' => '30 лет',
    ];
    $newArr = array();
    $range = range($from,$to);
    $newArr = array_intersect_key($timeArr, array_flip($range));
    return $newArr;
}
?>

Usage

<?php
    $newArray = period(240,360);
    echo "<pre>";
    print_r($newArray);
?>

Output

Array
(
    [240] => 20 лет
    [300] => 25 лет
    [360] => 30 лет
)

Upvotes: 0

LF-DevJourney
LF-DevJourney

Reputation: 28529

You can use array_slice like this, and you can check the live demo here.

$indexes = array_flip(array_keys($timeArr));
$results = array_slice($timeArr, $indexes[240], $indexes[360]);

Upvotes: 1

Suman Singh
Suman Singh

Reputation: 1377

Please try below:

function period($array, $keys)
{
    return array_intersect_key($array, array_flip($keys));
}

$keys = array( '240', '300' );
$results = period($timeArr, $keys);
print_r($results);

Upvotes: 1

Related Questions