извлечь выбранные значения массива на основе списка переполнения стека

У меня есть список ключей массива в виде строки

"hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"

Теперь нужно извлечь только эти значения, т. Е. $ Myarray [‘hasAddstrict’] должно стать $ hasAddStrict и т. Д.

Есть ли короткий способ сделать это? Мое довольно грязное решение:

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

1

Решение

Я согласен с Джеффом в том, что на самом деле лучшего способа нет, и что сохранение переменных в виде массива, вероятно, является лучшей идеей, но вы можете обернуть это в функцию для удобства (проверено в 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"));

При проверке следующим образом:

$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);

Вы получаете вывод:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]