2

次の多次元 JavaScript 配列があります。

var accounts =
    [
        { name: '069070474', crd_no:
        [
            {name: '0215020174357351', ssn_no: ['582238797'] }
        ]},
        { name: '089255135', crd_no:
        [
            {name: '0215020178346863', ssn_no: ['583872782','874514213']}
        ]},
        { name: '123456789', crd_no:
        [
            {name: '8888888888888888', ssn_no: ['122121212']}
        ]},
        { name: '131274740', crd_no:
        [
            {name: '0215020178888432', ssn_no: ['478498545','584586942']}
        ]},
        { name: '454296191', crd_no:
        [
            {name: '0215020178896484', ssn_no: ['582214564']}
        ]},
        { name: '987654321', crd_no:
        [
            {name: '8888888888888888', ssn_no: ['122121212']}
        ]}
    ];

また、次のスキーマを持つ mysql テーブルにも上記のデータがあります。

TABLE `profile_id`
(
`acct_no` varchar(19) NOT NULL COMMENT 'Customer account no',
`crd_no` varchar(19) NOT NULL COMMENT 'Customer card no',
`ssn_no` varchar(9) NOT NULL COMMENT 'Customer social security number',
PRIMARY KEY  (`acct_no`,`crd_no`,`ssn_no`)
)

私がやろうとしているのは、php を使用して mysql テーブルからデータを取得し、既存の JavaScript 配列と一致する多次元配列または json でエンコードされた文字列を作成することです。新しいレコードがテーブルに追加されると、配列が常に更新されるように、配列をループで構築したいと考えています。

正確なコードは必須ではありませんが (歓迎します)、これにアプローチする方法についての提案を探しているだけです。acct_noとcrd_no、または3つすべての一意の組み合わせで構築およびフィルタリングされた配列を取得できますが、javascriptでの方法とまったく同じように見えるphpで構築された配列をまだ取得していません。最終的な目標は、js 配列を 3 つのドロップダウン ボックスのセットにフィードすることです。各ボックスの選択された値は、次のボックスのデータ選択リストを決定します。これで、各ボックスから選択が行われたときに ajax を使用してデータベースにクエリを実行することでこれを設定できることがわかりましたが、何度もサーバーにアクセスする必要がなくなりました。これを行うための他の推奨事項もプラスです。

以下は、データを操作する JavaScript コードです。

    $(document).ready(function()
    {
        document.soapFormSetup.reset();

        $(function()
        {
            var start = '';
            var options = '<option selected value="'+ start +'">-----------------------' + '</option>' ;

            for (var i = 0; i < accounts.length; i++)
            {
                var opt = accounts[i].name ;

                options += '<option value="' + opt + '">xxxxxxxxxxxxxx' + opt.substring(5) + '</option>';
            }

            $("#sms_acct_no").html(options);

            start = '';
            options = '<option selected value="'+ start +'">-----------------------' + '</option>' ;

            for (var i=0; i < accounts[0].crd_no.length; i++)
            {
                var opt = accounts[0].crd_no[0].name ;

                options += '<option value="' + opt + '">xxxxxxxxxxxxxx' + opt.substring(12) + '</option>';
            }

            $("#sms_crd_no").html(options);

            start = '';
            options = '<option selected value="'+ start +'">--------------' + '</option>' ;

            for (var i=0; i < accounts[0].crd_no[0].ssn_no.length; i++)
            {
                var opt = accounts[0].crd_no[0].ssn_no[i] ;

                options += '<option value="' + opt + '">xxx-xx-' + opt.substring(5) + '</option>';
            }

            $("#sms_ssn_no").html(options);

            document.soapFormSetup.sms_ssn_no.disabled=true;
            document.soapFormSetup.sms_crd_no.disabled=true;

            $("#sms_acct_no").bind("change",
            function()
            {
                if ( $(this).children(":selected").val() !== "" )
                    document.soapFormSetup.sms_crd_no.disabled=false;
                else
                {
                    document.soapFormSetup.sms_crd_no.value="";
                    document.soapFormSetup.sms_ssn_no.value="";

                    document.soapFormSetup.sms_crd_no.disabled=true;
                    document.soapFormSetup.sms_ssn_no.disabled=true;
                }

                for(var i=0; i<accounts.length; i++)
                {
                    if (accounts[i].name == this.value)
                    {
                        start = '';
                        var crd_nos = '<option selected value="'+ start +'">-----------------------' + '</option>' ;

                        for (var j=0; j < accounts[i].crd_no.length; j++)
                        {
                            var opt= accounts[i].crd_no[j].name ;

                            crd_nos += '<option value="' + opt + '">xxxxxxxxxxxxxx' + opt.substring(12) + '</option>';
                        }

                        break;
                    }
                }

                $("#sms_crd_no").html(crd_nos);

                for(var i=0; i<accounts.length; i++)
                {
                    for(var j=0; j<accounts[i].crd_no.length; j++)
                    {
                        if(accounts[i].crd_no[j].name == $("#sms_crd_no").val())
                        {
                            start = '';
                            var crd_ssn_nos = '<option selected value="'+ start +'">--------------' + '</option>' ;

                            for (var k=0; k < accounts[i].crd_no[j].ssn_no.length; k++)
                            {
                                var opt = accounts[i].crd_no[j].ssn_no[k] ;

                                crd_ssn_nos += '<option value="' + opt + '">xxx-xx-' + opt.substring(5) + '</option>';
                            }

                            break;
                        }
                    }
                }

                $("#sms_ssn_no").html(crd_ssn_nos);

                document.soapFormSetup.sms_ssn_no.disabled=true;
                document.soapFormSetup.sms_ssn_no.value="";
            });

            $("#sms_crd_no").bind("change",
                function()
                {
                    if ( $(this).children(":selected").val() !== "" )
                        document.soapFormSetup.sms_ssn_no.disabled=false;
                    else
                    {
                        document.soapFormSetup.sms_ssn_no.value="";

                        document.soapFormSetup.sms_ssn_no.disabled=true;
                    }

                    for(var i=0; i<accounts.length; i++)
                    {
                        for(var j=0; j<accounts[i].crd_no.length; j++)
                        {
                            if(accounts[i].crd_no[j].name == this.value)
                            {
                                start = '';
                                var ssn_nos = '<option selected value="'+ start +'">--------------' + '</option>' ;

                                for (var k=0; k < accounts[i].crd_no[j].ssn_no.length; k++)
                                {
                                    var opt = accounts[i].crd_no[j].ssn_no[k] ;

                                    ssn_nos += '<option value="' + opt  + '">xxx-xx-' + opt.substring(5)  + '</option>';
                                }

                                break;
                            }
                        }
                    }

                    $("#sms_ssn_no").html(ssn_nos);
                });
            });
    });
4

2 に答える 2

1

次のコードは、JSON でエンコードされた同一の文字列を生成すると思います。

$accounts = array();
while($row = mysql_fetch_assoc($query)) {
    $accounts[] = array(
        "name"   => $row["acct_no"],
        "crd_no" => array(
            "name"   => $row["crd_no"],
            "ssn_no" => $row["ssn_no"]
        ) 
    );
}
echo json_encode($accounts);
于 2012-05-12T20:55:52.887 に答える
0

おそらく、1 つのアカウント名が複数のカードに関連付けられている可能性があります (そうでない場合、どうして crd_no が配列になるのでしょうか)。

// Create an array keyed by acct_no, containing arrays of crd_no data
$accounts = array();
while ($row = mysql_fetch_assoc($query)) {
    if (!isset($accounts[$row["acct_no"]])) {
       $accounts[$row["acct_no"]] = array();
    }
    $accounts[$row["acct_no"]][] = array(
        "name"   => $row["crd_no"],
        "ssn_no" => $row["ssn_no"]
    );
}

// but it's not the format you want so now...
$accounts_formatted = array();
foreach ($accounts as $name => $account) {
    $accounts_formatted[] = array(
        "name" => $name,
        "crd_no" => $account
    );
}
echo json_encode($accounts_formatted);
于 2012-05-15T08:45:22.880 に答える