假设我的$_POST
变量如下所示:
<?php
Array
(
[user_ID] => 65
[action] => editpost
[originalaction] => editpost
[post_author] => 154
[empl_bd_dd] => 6
[empl_bd_mm] => 5
[empl_bd_yy] => 1987
[empl_gen] => 1
[empl_height] => 155
[empl_weight] => 61
[empl_arra] => 2
[save] => Update
[post_it] => 2
[empl_pay] => J77
[empl_cust] => Married
[empl_lang] => Array
(
[0] => EN
[1] => FR
)
[empl_rent] => 1
[name] => Jimmy Nathan
[empl_text] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed interdum leo. Sed et elit quam, tempor placerat neque. Nullam sapien odio, egestas iaculis dictum ut, congue ullamcorper tellus.
[empl_sk_0] => 6
[empl_sk_1] => 7
[empl_sk_2] => 5
)
?>
如您所见,我在所有表单变量前面都添加了
empl_
。无需一一指定所有这些变量,我如何以最便宜的希望优雅的方式将所有形式变量从$_POST
放入数组中?有没有可以用于此目的的PHP数组函数或它们的组合?像
CSS
中一样,您可以使用empl
选择以[class*="empl_"]
开头的类的所有元素,是否有一种方法可以使用PHP中的数组键来做到这一点,例如$empl_post = $_POST['empl_*']
编辑答复-对@chris的答案进行更正:
$_POST
必须是array_intersect_key
的第一个参数,例如:$empl_POST = array_intersect_key($_POST, array_flip(preg_grep('/^empl_/', array_keys($_POST))));
最佳答案
$r = array_intersect_key($_POST, array_flip(preg_grep('/^empl_/', array_keys($_POST))));
他们确实需要在
PREG_GREP_KEYS
中添加一个preg_grep()
标志,因此我们不必做所有的麻烦事...作为功能:
function preg_grep_keys($pattern, $input, $flags = 0) {
return array_intersect_key(
$input,
array_flip(preg_grep(
$pattern,
array_keys($input),
$flags
))
);
}
编辑-由于php 5.6
array_filter
现在具有一些新标志,可让您访问过滤器回调中的数组键。function preg_grep_keys($pattern, $input, $flags = 0) {
return array_filter($input, function($key) use ($pattern, $flags) {
return preg_match($pattern, $key, $flags);
}, ARRAY_FILTER_USE_KEY);
}
用
$filtered = preg_grep_keys('/^empl_/', $_POST);
关于php - 如何使用以前缀开头的键获取$ _POST数组的子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10583591/