【发布时间】:2013-10-21 16:43:43
【问题描述】:
我不知道我在做的事情已经超出了我的代码中的内容。在下面的示例中,我试图在每种车道类型的每个电缆类型列和行下都有多种电缆类型,但正如您所见,表中的每个仅显示一种电缆类型。
我正在尝试创建一个 while 循环或其他东西,以便对于每个车道类型,它将产生与所述车道类型关联的尽可能多的电缆类型,然后继续进行下一个车道类型做同样的事情。对于通道 5 和 6,我相信无论如何只有一种电缆类型,所以这些看起来是正确的。如何在 PHP 中创建一个 JSON 数组,为每种车道类型将所有电缆类型分组在一起,而不是将每种电缆类型分别放入单独的数组中?
现在发生的情况是,即使您看到每个通道名称或类型有多种电缆类型,但它们是分开的,我想将它们组合在一起,所以如果我调用 array[0],那将是 Lane-1 的所有电缆类型, array1 将调用 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"]}
旧图像:
****目前正在工作****
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);
}
}
}
【问题讨论】:
-
您的关键问题实际上是您的查询。我不明白您为什么要查询 17 次不同的时间,而您可以在一次查询中获取所有这些数据。先担心得到正确的查询,然后再担心进入 PHP 数据结构。还要考虑您的表结构。如果这些值是互斥的,那么对于 cable_type/gp_cable_type 有不同的列似乎很奇怪。可能是一个单独的 cable_type 列和一个 0/1 值“gp”列来表示这是否是“gp”(不管是什么意思)
-
我查询了 17 个项目,因为数据库中可能有 17 个车道类型(车道 1 到车道 17),我希望每个数据仅与该车道类型有关。也因为我不知道更好......我也不喜欢它,但这是我所知道的生成数据的唯一方法。
-
至于“互斥”数据,它们需要位于 SQL DB 的两列中,因为客户端就是这样设置的。它们是不同的,不一样的,但需要针对这个特定的实例组合在一起。
-
您知道您可以通过一次查询选择所有“车道类型”吗?尝试这样的事情,看看它会把你带到哪里:
SELECT DISTINT lane_name, cable_type, gp_cable_type FROM bundle_lanes ORDER BY bundle ORDER BY lane_name ASC, cable_type ASC, gp_cable_type ASC -
当您使用 PHP 中的结果集时,这非常容易做到。在 fetch 循环
$array[$row['lane_name']][] = $row['cable_type']或$array[$row['lane_name']][] = $row['gp_cable_type']中类似的内容取决于设置的字段。