根据列表 php 提取选定的数组值
extract selected array values based on list php
我有一个字符串形式的数组键列表
"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);
我同意 Jeff 的观点,没有更好的方法,将变量保存为数组可能是一个更好的主意,但为了方便起见,您可以将其包装在一个函数中(在 [=19 中测试过) =] 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"
我有一个字符串形式的数组键列表
"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);
我同意 Jeff 的观点,没有更好的方法,将变量保存为数组可能是一个更好的主意,但为了方便起见,您可以将其包装在一个函数中(在 [=19 中测试过) =] 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"