2015-09-24 33 views
4

我有一个表单提交一个数组:如何在PHP中对多个表单字段数组进行排序?

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 
     ) 

) 
+3

更容易改变形式。 – AbraCadaver

+0

你可以通过表单来做到这一点? –

+0

您也可以总是使用jQuery来更改每个表单值的组织 - 以匹配您所期望的内容。显然,你会想在你的提交代码中验证你的输入,但你应该这样做。 –

回答

7

既然你表明你可以改变形式,你可以做这样的事情,并得到想要的阵列结构:

<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等...分离

+0

该解决方案很有趣,因为在处理提交的数据以安排数据时,不需要额外的开销。 –

+0

是的 - 这正是我应该做的。我可以在表单中的产品输出循环之前轻松设置迭代器。谢谢。 –

3

选择一个场到循环结束了,然后从其他字段抢值:

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 
); 
0
$newArray = []; 
    foreach ($array as $mainKey => $value) { 
     foreach($value as $subKey => $subValue) { 
      $newArray[$subKey][$mainKey] = $subValue; 
     } 
    } 

    print_r($newArray); 
2

很基本的例子,但应与工作更复杂的数据集

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