【问题标题】:How to sort multiple form field arrays in php?如何在php中对多个表单字段数组进行排序?
【发布时间】:2015-12-22 14:32:39
【问题描述】:

我有一个来自表单提交的数组:

Array
(
    [form_key] => 9juTLit5qQbaBb98
    [sku] => Array
        (
            [0] => AC25
            [1] => AC30
            [2] => AC31
        )

    [product] => Array
        (
            [0] => 95
            [1] => 100
            [2] => 101
        )

    [related_product] => Array
        (
            [0] => 
            [1] => 
            [2] => 
        )

    [qty] => Array
        (
            [0] => 2
            [1] => 2
            [2] => 2
        )

)

有没有更好的排序方式?

Array
(
    [form_key] => 9juTLit5qQbaBb98
    [0] => Array
        (
            [sku] => AC25
            [product] => 95
            [qty] => 2
        )

    [1] => Array
        (
            [sku] => AC30
            [product] => 100
            [qty] => 2
        )


    [2] => Array
        (
            [sku] => AC31
            [product] => 101
            [qty] => 2
        )

)

【问题讨论】:

  • 更容易改变表格。
  • 您可以通过表单来执行此操作吗?
  • 您也可以始终使用 jQuery 来更改每个表单值的组织——以匹配您想要的。显然,您需要在提交代码中验证您的输入,但无论如何您都应该这样做。
  • 您的表单实际上是什么样的?

标签: php arrays forms sorting


【解决方案1】:

由于您表示可以更改表单,因此您可以执行以下操作并获得所需的数组结构:

<input type="text" name="data[0][sku]">
<input type="text" name="data[0][product]">
<input type="text" name="data[0][qty]">

<input type="text" name="data[1][sku]">
<input type="text" name="data[1][product]">
<input type="text" name="data[1][qty]">

数组将位于$_POST['data'] 中,这对于循环来说很方便,因为它与form_keysubmit 等...

【讨论】:

  • 这个解决方案很有意思,因为在处理提交的数据时不需要额外的开销来排列数据。
  • 是的——这正是我应该做的。我可以在表单中的产品输出循环之前轻松设置一个迭代器。谢谢。
【解决方案2】:

选择一个要循环的字段,然后从其他字段中获取值:

foreach($data['sku'] as $key=>$sku){
    $product = $data['product'][$key];
    $related_product = $data['related_product'][$key];
    $qty = $data['qty'][$key];
}

然后你可以构建一个新数组,或者对这些值做任何事情。

$newArray[] = array(
    'sku' => $sku,
    'product' => $product,
    'related_product' => $related_product,
    'qty' => $qty
);

【讨论】:

    【解决方案3】:

    非常基本的示例,但应该适用于更复杂的数据集

    $rs = [];
    foreach($_POST as $k1=>$elem) {
        if(is_array($elem)) {
            foreach($elem as $k2=>$value) {
                $rs[$k2][$k1] = $value;
            }   
        }
    }
    

    【讨论】:

      【解决方案4】:
          $newArray = [];
          foreach ($array as $mainKey => $value ) {
              foreach($value as $subKey => $subValue) {
                  $newArray[$subKey][$mainKey] = $subValue;
              }
          }
      
          print_r($newArray);
      

      【讨论】:

        猜你喜欢
        • 2016-08-26
        • 2011-02-11
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多