【问题标题】:Group serialized JS array into similar arrays based on their name根据名称将序列化的 JS 数组分组为相似的数组
【发布时间】:2019-05-15 12:46:38
【问题描述】:

我用$('#myForm').serializeArray(); 序列化了我的表单。我得到了所有的输入,但我的表单很复杂,我需要对相同的名称进行分组。

在我的 ajaxController 中:

$data = json_decode($request->getParameter('data'));    
print_r($data);

这是输出的结果:

array (size=8)
  0 => 
    object(stdClass)[192]
      public 'name' => string 'evaluation_candidature[id_evaluateur_candidature]' (length=49)
      public 'value' => string '2899' (length=4)
  1 => 
    object(stdClass)[196]
      public 'name' => string 'evaluation_candidature[_csrf_token]' (length=35)
      public 'value' => string '51c7f3442410a04e926c7a7abd1082d9' (length=32)
  2 => 
    object(stdClass)[197]
      public 'name' => string 'evaluation_candidature[note_globale]' (length=36)
      public 'value' => string 'A+' (length=2)
  3 => 
    object(stdClass)[198]
      public 'name' => string 'evaluation_candidature[appreciation]' (length=36)
      public 'value' => string 'je teste l'évaluation
TB!' (length=27)
  4 => 
    object(stdClass)[199]
      public 'name' => string 'evaluation_candidature[Apport pour le laboratoire_1][note]' (length=58)
      public 'value' => string '1' (length=1)
  5 => 
    object(stdClass)[200]
      public 'name' => string 'evaluation_candidature[Apport pour le laboratoire_1][id_evaluateur_candidature]' (length=79)
      public 'value' => string '2899' (length=4)
  6 => 
    object(stdClass)[201]
      public 'name' => string 'evaluation_candidature[Apport pour le laboratoire_1][evaluation_critere_id]' (length=75)
      public 'value' => string '91' (length=2)
  7 => 
    object(stdClass)[202]
      public 'name' => string 'evaluation_candidature[Apport pour le laboratoire_1][remarque]' (length=62)
      public 'value' => string '' (length=0)

我需要对所有evaluation_candidature[Apport pour le laboratoire_1] 进行分组,还需要对evaluation_candidature 进行分组。

问题是我事先不知道这些名字。名称可能不同,因为它取决于表单集合。我希望有人可以帮助我。

更新我尝试在 javascript 中分组:

var datas = [],
        serialized = $('#myForm').serializeArray(),
        i;
    for (i=0; i<serialized.length; i+=2) {
        var tmpObj = {};
        tmpObj[ serialized[i].name ] = serialized[i].value;
        tmpObj[ serialized[i+1].name ] = serialized[i+1].value;
        datas.push(tmpObj);
    }

    console.log(datas);

这里是输出:

array (size=6)
  0 => 
    object(stdClass)[192]
      public 'evaluation_candidature[id_evaluateur_candidature]' => string '2899' (length=4)
      public 'evaluation_candidature[_csrf_token]' => string '51c7f3442410a04e926c7a7abd1082d9' (length=32)
  1 => 
    object(stdClass)[196]
      public 'evaluation_candidature[note_globale]' => string 'A+' (length=2)
      public 'evaluation_candidature[appreciation]' => string 'je teste l'évaluation
TB!' (length=27)
  2 => 
    object(stdClass)[197]
      public 'evaluation_candidature[Apport pour le laboratoire_1][note]' => string '1' (length=1)
      public 'evaluation_candidature[Apport pour le laboratoire_1][id_evaluateur_candidature]' => string '2899' (length=4)
  3 => 
    object(stdClass)[198]
      public 'evaluation_candidature[Apport pour le laboratoire_1][evaluation_critere_id]' => string '91' (length=2)
      public 'evaluation_candidature[Apport pour le laboratoire_1][remarque]' => string '' (length=0)

如你所见,我仍然有重复。

【问题讨论】:

  • 我认为这意味着您必须在 javascript 中进行分组,因为我假设您会知道页面的用途以及名称将是什么
  • 感谢您的回复我更新了帖子

标签: javascript php jquery forms


【解决方案1】:

我 100% 确定您需要 PHP 的 array_filter($your_array, "callBackFunction")。在您通过 JS 收集表单详细信息后,将其传递给 PHP,并使用回调函数使用您的函数或内置函数(如 array_sort()、array_unique()、...)按照您想要的方式对其进行排序。

$sorted_array = array_filter(
    $my_array, 
    function($value) {
        // your code to filter through and group them
        foreach() {
            $new_group_array[$key] = $value;
        }
        return $new_grouped_array;
    }
);

或者如果你想通过KEY来做

// list of unique array keys
$new_unique_array = array_unique($my_array);
$array_groups = array('something', 'something02', ...)
$sorted_array = array_filter(
    $new_unique_array,
    function ($key) use ($allowed) {
       // in_array($key, $allowed);
    },
    ARRAY_FILTER_USE_KEY
);

【讨论】:

    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多