如何确定数组中设置值或非设置值的数量


How to determine the number of set values or non-set values in an array

我有以下函数:

public function searchsubject(){
         $subject1 = Input::get('subject1');
         $subject2 = Input::get('subject2');
         $subject3 = Input::get('subject3');
         $subject4 = Input::get('subject4');
//if a single subject is chosen
return Redirect::route('home', array('subject1' => $subject1, 'subject2' => 
$subject2, 'subject' => $subject3, 'subject' => $subject4));
//if two subjects are chosen
return Redirect::route('hometwo', array('subject1' => $subject1, 'subject2' 
=> $subject2, 'subject' => $subject3, 'subject' => $subject4));
//if three subjects are chosen
return Redirect::route('homethree', array('subject1' => $subject1,   'subject2' =>
        $subject2, 'subject' => $subject3, 'subject' => $subject4));

我的目标是将用户重定向到三个 url 中的任何一个。

  1. URL 一个(如果用户选择一个主题(。
  2. URL 二(如果用户选择两个主题(。
  3. URL 三(如果用户选择三个主题(。

问题是我将如何实现这一目标?

我的想法是将所有这些值放入一个数组中,并检查其中有多少值具有值并相应地重定向,但这是如何完成的?

你可以尝试这样的事情,首先得到主题:

$subjects = [];
$inputs = Input::all();
array_walk($inputs, function ($v, $k) use (&$subjects) {
    if(starts_with($k, 'subject')) {
        $subjects[$k] = $v;
    }
});

现在您拥有以 subject 开头的所有inputs/fields,例如:subject1subject2等。所以现在,只需获取$subjects的计数,例如:

$index = count($subjects);

现在,您可以使用,例如:

// Keep this array pre-defined, could be a class property, if so then use $this->urls
$urls = ['zero', 'url-for-one-subject', 'url-for-two-subjects', 'url-for-three-subjects'];
// Redirect now using $urls[$index]
return Redirect::route($urls[$index)->with($subjects);