1

私はそのようなフォームを持っています:

<form method="POST">
    <p>Model 1</p>
        <input name="data_quantity[]">
        <input name="data_consignment[]">
        <input name="data_price[]">

    <p>Model 2</p>
        <input name="data_quantity[]">
        <input name="data_consignment[]">
        <input name="data_price[]">

    <p>Model 3</p>
        <input name="data_quantity[]">
        <input name="data_consignment[]">
        <input name="data_price[]">

    ...
</form>

今。PHP でデータを読み取ると、POST 配列 ( $_POST) に 3 つの配列があります: $_POST['data_quantity'], $_POST['data_consignment'], $_POST['data_price']...

それらをマージする必要があるため、合計を 1 つの配列でカウントforし、投稿の各配列の値を使用して配列を再作成します。簡単な例:

public function build_Lineitems($Quantity=array(), $Consignment=array(), $TransferFrom=array(), $TransferTo=array(), $Price=array(), $Attributes=array()){
    ...

    #   On va boucler sur un des 6 tableaux...
    $Lineitems = array();

    foreach($Quantity as $ModelID => $Lineitem){
        #   Entrée dans le tableau
        if(isset($Lineitems[$ModelID]) === FALSE){
            $Lineitems[$ModelID] = array();
        }

        #   Est-ce que c'est un tableau
        if(is_array($Lineitem) === TRUE){
            foreach($Lineitem as $Entry => $Clone){
                $Lineitems[$ModelID][] = array(
                    'qty'       => (isset($Quantity[$ModelID][$Entry]) === TRUE ? $Quantity[$ModelID][$Entry] : array()),
                    'con'       => (isset($Consignment[$ModelID][$Entry]) === TRUE ? $Consignment[$ModelID][$Entry] : array()),
                    'xferfrom'  => (isset($TransferFrom[$ModelID][$Entry]) === TRUE ? $TransferFrom[$ModelID][$Entry] : array()),
                    'xferto'    => (isset($TransferTo[$ModelID][$Entry]) === TRUE ? $TransferTo[$ModelID][$Entry] : array()),
                    'price'     => (isset($Price[$ModelID][$Entry]) === TRUE ? $Price[$ModelID][$Entry] : array()),
                    'attr'      => (isset($Attributes[$ModelID][$Entry]) === TRUE ? (empty($Attributes[$ModelID][$Entry]) === FALSE ? explode(',', $Attributes[$ModelID][$Entry]) : array()) : array())
                );
            }
        } else {
            #   Okay
            $Lineitems[$ModelID] = array(
                'qty'       => (isset($Quantity[$ModelID]) === TRUE ? $Quantity[$ModelID] : array()),
                'con'       => (isset($Consignment[$ModelID]) === TRUE ? $Consignment[$ModelID] : array()),
                'xferfrom'  => (isset($TransferFrom[$ModelID]) === TRUE ? $TransferFrom[$ModelID] : array()),
                'xferto'    => (isset($TransferTo[$ModelID]) === TRUE ? $TransferTo[$ModelID] : array()),
                'price'     => (isset($Price[$ModelID]) === TRUE ? $Price[$ModelID] : array()),
                'attr'      => array()
            );
        }
    }

    #   On renvoie
    return $Lineitems;
}

私の質問は、これを行うためのよりクリーンな方法はありますか? ありがとう。(これ: 複数配列のマージ部分。

4

2 に答える 2

1

最初に多次元の値を投稿できます。

<input name="data[quantity][]">

または、別の階層順序で (カウントアップしながら$i):

<input name="data[<?php echo $i; ?>][quantity]">
于 2012-10-11T20:21:13.980 に答える
0

内部のすべてをマージするarray_mergeまたはその再帰的な兄弟について考えたことはありますか? ただし、望ましくないデータを取得しないように、 $_POST で直接使用しないように注意する必要があります

于 2012-10-11T20:18:59.683 に答える