Search code examples
phparraysextractpartial

extract selected array values based on list php


I have a list of array keys in form of a string

"hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"

Now, want to extract only those values, i.e $myarray['hasAddstrict'] should become $hasAddStrict, etc.

Is there a short way to do it? My rather dirty solution:

$ff = explode(',' ,"hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek");
    foreach ( $ff   as $key){   $ff[$key] =    $SERVICE[$key]  ;    }
    extract($ff);

Solution

  • I agree with Jeff that there isn't really a better way, and that keeping the variables as an array is probably a better idea, but you could wrap it up in a function for convenience (tested in php 5.6):

    <?php
    
    function array_extract(array $assoc_array, $keys_list)
    {
        return array_intersect_key($assoc_array, array_flip(explode(',', $keys_list)));
    }
    
    extract(array_extract($SERVICE, "hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"));
    

    When tested as follows:

    $SERVICE = [
        'hasAddStrict' => 123,
        'freqItems' => 456,
        'freqAmount' => 789,
        'freqUnit' => 'abc',
        'freqFirstDayOfWeek' => 'def',
    ];
    
    extract(array_extract($SERVICE, "hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"));
    
    var_dump($hasAddStrict, $freqItems, $freqAmount, $freqUnit, $freqFirstDayOfWeek);
    

    You get output:

    int(123)
    int(456)
    int(789)
    string(3) "abc"
    string(3) "def"