使用SQL数据在PHP中操作JSON数组

时间:2013-10-21 16:43:43

标签: php sql arrays json

我不知道自己在我的代码中已经做了什么。在下面的示例中,我尝试在每个“电缆类型”列和每个“电路类型”的行下都有多个电缆类型,但正如您所看到的,表中只显示了一种电缆类型。

我正在尝试创建一个while循环或其他东西,因此对于每个Lane类型,它将生成与所述lane类型相关联的任意数量的电缆类型,然后继续进行下一个类型循环。对于5号和6号车道,我认为无论如何只有一种电缆类型,所以这些看起来是正确的。如何在PHP中创建一个JSON数组,以便为​​每种通道类型将所有电缆类型组合在一起,而不是仅将每种电缆类型放在彼此不同的单独阵列中?

现在发生的事情是,即使您看到每个通道名称或类型有多种电缆类型,它们也是分开的,我想将它们组合在一起,所以如果我调用array [0]那将是所有Lane-1的电缆类型,数组1将调用所有Lane-2的电缆类型等。截至目前,array [0]只调用第一个cable_type而不是该lane_name的电缆类型数组。

****编辑(请参阅我的最新评论)****

当前PHP在JSON数组之后吐出

{"Lane-1":["PPAHY4614","PPAHY464","HYBP464.01","PPA241807","ADMC1807"],"Lane-2":["HYBP906.1","PPAHY906","HP464.02","PP8HY461"],"Lane-3":["HYBP421","PAADY412"]}

旧图片: enter image description here

****目前正在工作**** enter image description here

PHP

//Create array
//Define JSON array
$array = array();

//Run SQL for each array value
    $query="(SELECT DISTINCT lane_name,cable_type
        FROM bundle_lanes
        WHERE lane_name != '' AND lane_name != 'Shipped')
        UNION
        (SELECT DISTINCT lane_name,gp_cable_type
        FROM bundle_lanes
        WHERE lane_name != '' AND lane_name != 'Shipped')
        ORDER BY lane_name";

    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);

    while ( $row = $result->fetch_assoc() ) {
        $array[$row['lane_name']][] = $row['cable_type'];
    }

    echo json_encode($array);

的Javascript

$.ajax({
    url: './php/populate_cableTypes.php',
    dataType:'json',
    success: function (data) {

        console.log(JSON.stringify(data));

        //since data length is always 1,iterate through the 17 lane types
        for (var n=1; n<=17; n++) {
            //stringify data so it can be manipulated
            var stringifyTypes = JSON.stringify(data["Lane-"+n]);
            //check first if data is not null before populating
            if (stringifyTypes != null) {
                console.log("Lane-" + n + " string cable types: " + stringifyTypes);
                //replace characters with new line breaks to format data
                var cable_types = stringifyTypes.replace(/,/g, '<br />')
                .replace(/\"/g, "")//backslash for quotes and brackets
                .replace(/\[/g, "")
                .replace(/\]/g, "");

                //Show data in newly generated cable type td column for each lane type
                $('td.Lane-'+n+'.weight').after("<td>" + cable_types + "</td>");

                console.log("Lane-" + n + " formatted cable types: " + cable_types);
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

为什么不使用each?更简洁的迭代数据方式

 $.each(data, function(index, val){
     var n = index + 1;
     $('.cable_type'+n).text(val['cable_type']);
 });