php - 如何使用以前缀开头的键获取 $_POST 数组的子集

标签 php arrays array-key

假设我的 $_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 中一样,您可以使用 [class*="empl_"] 选择具有以 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() 添加一个 PREG_GREP_KEYS 标志,这样我们就不必做那些乱七八糟的事情了...

作为函数:

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/

相关文章:

c - 复制链表头时出现段错误

php - 当索引结束时如何在 PHP 数组中环绕?

php - 使用来自另一个二维关联数组的多个级别的键过滤二维关联数组

php - array_key_exists 不工作

php - CentOS Ioncube make_license 每次我尝试执行时都是 "Killed"

php - Laravel Blade @foreach 不工作

php - 将常量数组转换为常量字符串

php - 在查询中使用多个条件时出错

javascript - 使用来自另一个数组的查询的多个条件过滤数组

java - 创建基于文本的 'database' 时尝试使用数组存储同一对象的多个实例时出现空指针异常