PHP:如何通过指定从较大的数组中提取的一组键值来创建过滤的数组?

时间:2014-12-16 18:16:49

标签: php arrays

如何基于更大的数组创建更小的过滤数组。例如,这是更大的数组:

$large_array = array(
    'user_email' => array(
        'required' => true,
        'email' => true,
        'max' => 200,
        'unique' => 'users'),
    'password' => array(
        'required' => true,
        'min' => 6,
        'max' => 20),
    'password_again' => array(
        'required' => true,
        'matches' => 'password'),
    'name_first' => array(
        'required' => false,
        'min' => 2,
        'max' => 64),
    'name_last' => array(
        'required' => false,
        'min' => 2,
        'max' => 64));

我想根据' user_email'创建一个过滤后的数组。和' name_first'来自大阵列的键。这个过滤后的数组看起来像这样:

$filtered_array = array(
    'user_email' => array(
        'required' => true,
        'email' => true,
        'max' => 200,
        'unique' => 'users'),
    'name_first' => array(
        'required' => false,
        'min' => 2,
        'max' => 64);

在PHP中执行此操作的最佳方法是什么?我试图获取一个带有一组键的函数和$ large_array来创建$ filtered_array。

1 个答案:

答案 0 :(得分:0)

array_filterARRAY_FILTER_USE_KEY标记一起使用。

像这样:

$filtered_array = array_filter($myarr, function($key){
    $keys = array("key1", "key2");
    return in_array($key, $keys);
}, ARRAY_FILTER_USE_KEY);

如果你的php版本是< 5.6.0你将无法使用ARRAY_FILTER_USE_KEY标志,如果你的php版本是< 5.3.0您将无法使用匿名函数语法,但您只需创建一个命名函数并将该名称作为callback参数的字符串传递。

或者,这应该做同样的事情:

function ($arr, $keys)
{
    $newArr = array();

    foreach($arr as $key => $val)
    {
        if(in_array($key, $keys))
            $newArr[$key] = $val;
    }

    return $newArr;
}