Laravel 4输入::只有通配符

时间:2013-11-01 22:08:28

标签: laravel-4

有没有办法在Laravel 4中仅在Input ::中使用通配符?

例如:

$actInputs = Input::only('act*');

只给我以字符串act开头的输入。

2 个答案:

答案 0 :(得分:1)

这有效:

$actInputs = array();
foreach (Input::all() as $id => $value) {
   if (preg_match('/^act(\w+)/i', $id))
      $actInputs[$id] = $value;
}

答案 1 :(得分:0)

我想了另一种方式

(inputStartsWith,inputEndsWith和InputMatching)

// inputStartsWith a string
function inputStartsWith($pattern = null)
{
    $input = Input::all(); $result = array();
    array_walk($input, function ($v, $k) use ($pattern, &$result) {
        if(starts_with($k, $pattern)) {
            $result[$k] = $v;
        }
    });
    return $result;
}

使用它:

$inputs = inputStartsWith('act');

更新:(另请inputEndsWith

// inputEndsWith a string
function inputEndsWith($pattern = null)
{
    $input = Input::all(); $result = array();
    array_walk($input, function ($v, $k) use ($pattern, &$result) {
        if(ends_with($k, $pattern)) {
            $result[$k] = $v;
        }
    });
    return $result;
}

使用它:

$inputs = inputEndsWith('_name');

可以将这些用作helper函数或extend core类,并添加这些函数。

更新:(模式匹配)

function InputMatching($pattern) {
    $input = Input::all();
    return array_intersect_key(
        $input,
        array_flip(preg_grep($pattern, array_keys($input), 0))
    );
}

使用它:

// will match 'first_name1' and 'first_name2' (ends with digit)
$inputs = InputMatching("/^.*\d$/");

This Could be helpful.