如何在PHP中对多个表单字段数组进行排序?

4

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

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
你可以获取表单来完成吗? - Sean Kimball
你也可以随时使用jQuery来更改每个表单值的组织方式,以匹配您所需的内容。显然,在提交代码中应该验证输入,但无论如何,您都应该这样做。 - Brandon White
你的表格实际上是什么样子的? - Brandon White
4个回答

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等隔离。

这个解决方案很有趣,因为在处理提交的数据以整理数据时,您不需要额外的开销。 - Gustavo Straube
是的 - 这正是我应该做的。我可以在表单中的产品输出循环之前轻松设置迭代器。谢谢。 - Sean Kimball

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
);

2

这是一个相当基础的示例,但它可以适用于更复杂的数据集。

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

0
    $newArray = [];
    foreach ($array as $mainKey => $value ) {
        foreach($value as $subKey => $subValue) {
            $newArray[$subKey][$mainKey] = $subValue;
        }
    }

    print_r($newArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接