创建一组客户端

时间:2012-05-17 16:04:28

标签: php javascript arrays codeigniter multidimensional-array

对于我的选择框切换,我需要使用php在加载时生成js数组,为select选项值预先构建一个javascript数组。到目前为止,我已经通过创建一个对象并将其添加到数组中来完成此操作,但现在我需要一个对象的属性作为多年的数组。我很接近(如果我document.write它,对象的clientForm属性将返回一个csv列表),但我不认为它是一个数组,因为我无法访问length属性和以前的document.write不输出阵列。谁能发现我做错了什么或建议另一种方法?

这是输出Javascript数组的php(我在CodeIgniter中构建了系统):

echo '<script type="text/javascript">';
            $array = 'var companies = new Array();';
$i = 0;foreach($clientList as $client) :
                $array .= 'arrayItem'.$i.' = {clientNo:"'.$client->client_id.'", clientCompany:"'.$client->client_company_name.'", clientRef:"'.$client->client_ref_no.'", clientForms: Array(';
                if($client->client_forms != "")
                {

                    $a = 0; foreach($client->client_forms as $form) :
                        $array .= $form.", ";
                    ++$a; endforeach;

                }
                $array = substr($array, 0, -2); 
                $array .= ')};';
                $array .= 'companies['.$i.'] = arrayItem'.$i.'; ';
++$i; endforeach;
            echo $array;
            echo '</script>';

这是当前的输出:

<script type="text/javascript">
    var companies = new Array();
    arrayItem0 = {clientNo:"1", clientCompany:"Test1", clientRef:"UG123HS", clientForms: Array(1, 15)};
    companies[0] = arrayItem0;

    arrayItem1 = {clientNo:"2", clientCompany:"Test2", clientRef:"UF321HS", clientForms: Array(17)};
    companies[1] = arrayItem1;
</script>

如果你想看看,这里是jsfiddle上的完整输出代码(jsfiddle似乎无法使我的onclicks工作,但它们在实际的网页上。)

谢谢!

3 个答案:

答案 0 :(得分:1)

要创建数组,最好使用以下语法:clientForms: [1,15]

或者别忘了添加newclientForms: new Array(1,15)

答案 1 :(得分:1)

你的代码看起来并不太远,因为jsFiddle工作得不好,很难说。但我确实注意到了一件事。

list.options[i+1]=new Option(companies[i].clientCompany, companies[i].clientRef, false, false); //Add the first option in的位置应该list.options[cnt+1]=new Option(companies[i].clientCompany, companies[i].clientRef, false, false); //Add the first option in

注意我已将第一个i更改为cnti是单步执行数组的计数器,而cnt实际上是您的选项计数器。如果您的实际页面没有为每个数组项生成结果,那么您可能会留下空白选项。

编辑:

这是在函数replaceCompanySelect中。

答案 2 :(得分:0)

感谢@mashington和@ParthThakkar的答案,我不知道PHP中的json_encode()和javascript中的JSON.parse()如何协同工作。这是我的新PHP代码:

echo '<script type="text/javascript">';
    echo "var companies = JSON.parse('".json_encode($clientList)."');";
echo '</script>';