php - 使用 SQL 数据创建数组或 json

标签 php arrays

因此,我进行了一个检索一些测试数据的查询,并且需要在数组中对这些数据进行排序。

数据可能如下所示:

文本形式的表格数据

testsuitecollectionId testsuiteId testcaseId Status
17      38      443     passed
457     39      444     passed
455     40      447     passed
455     40      448     passed
455     40      449     passed
34      1216    960     passed
457     1216    961     passed
457     1216    962     passed
34      1216    964     passed
456     1216    966     na
457     124     975     passed
457     124     976     passed
457     124     977     passed
457     142     1033    passed
457     464     1070    passed
457     464     1071    passed
457     464     1072    passed
455     687     1345    passed
34      688     1346    passed
34      690     1351    passed
34      690     1352    passed
34      691     1355    passed
34      691     1356    passed
34      691     1357    passed
34      691     1358    passed
34      691     1359    passed
34      692     1361    failed
34      693     1362    failed

我确实有一个数组,其中包含所需的所有 TestSuiteCollectionIds,名为 $tsc

我想做的是创建一个数组/JSON(不知道什么是最好的),如下所示: example

所以我试图通过对数据进行排序来以某种方式获得如图所示的结构,以便稍后在 Excel 中使用它。 我尝试创建一个 foreach 循环,但卡住了。

这将创建一个以下样式的数组:

$ => Array (2)
(
|    ['454'] => Array (9)
|    (
|    |    ['0'] = String(2) "38"
|    |    ['1'] = String(2) "39"
|    |    ['2'] = String(2) "40"
|    |    ['3'] = String(2) "40"
|    |    ['4'] = String(2) "40"
|    |    ['5'] = String(4) "1216"
|    |    ['6'] = String(4) "1216"
|    |    ['7'] = String(4) "1216"
|    |    ['8'] = String(4) "1216"
      )
|    ['234'] => Array (9)
|    (
|    |    ['0'] = String(2) "38"
|    |    ['1'] = String(2) "39"
|    |    ['2'] = String(2) "40"
|    |    ['3'] = String(2) "40"
|    |    ['4'] = String(2) "40"
|    |    ['5'] = String(4) "1216"
|    |    ['6'] = String(4) "1216"
|    |    ['7'] = String(4) "1216"
|    |    ['8'] = String(4) "1216"
      )
)

我用这段代码创建了数组

$tsc_arr = $ts_arr = $tc_arr = array();
foreach ($tsc as $id) {
    foreach ($test_data as $key) {
        if($key['TestSuiteCollectionId'] = $id){
            $tsc_arr[$key['TestSuiteCollectionId']][] = $key['TestSuiteId'];
        }
    }
}

但我对如何使测试套件变得独特也有点困惑。所以我有唯一的ID testsuitecollectionId --> 唯一的testsuiteId --> testcaseId = Status, testcaseId = Status

将其作为 JSON 或数组是最简单的还是有其他我不知道的方法?

我可能已经提出了一个解决方案,但我不知道这是否可以做得更漂亮?

foreach ($tsc as $id) {
    foreach ($test_data as $key) {
        if($key['TestSuiteCollectionId'] = $id){
            $tsc_arr[$key['TestSuiteCollectionId']][$key['TestSuiteId']][] = $key['TestCaseId'].";".$key['StatusName'];
        }
    }
}

这部分$tsc_arr[$key['TestSuiteCollectionId']][$key['TestSuiteId']][] 使所有 TestCase 数据进入相同的 testsuite 并且测试套件是唯一的。

最佳答案

您可以使用下一个代码MySQL + PHP:

$query = "SELECT * FROM tbl ORDER BY testsuitecollectionId, testsuiteId, testcaseId;";
$stmt = $pdo->prepare($query);
$stmt->execute();

$result = [];

while($r = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if (!isset($result["testsuitecollectionId_{$r['testsuitecollectionId']}"]))
        $result["testsuitecollectionId_{$r['testsuitecollectionId']}"] = [];
    
    if (!isset($result["testsuitecollectionId_{$r['testsuitecollectionId']}"]["testsuiteId_{$r['testsuiteId']}"]))
        $result["testsuitecollectionId_{$r['testsuitecollectionId']}"]["testsuiteId_{$r['testsuiteId']}"] = [];
    
    $result["testsuitecollectionId_{$r['testsuitecollectionId']}"]["testsuiteId_{$r['testsuiteId']}"]["testcaseId_{$r['testcaseId']}"] = $r['status'];
}

print_r($result);

MySQL + PHP fiddle

如果您需要 JSON 结果:

$json = json_encode($result);

关于php - 使用 SQL 数据创建数组或 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70078358/

相关文章:

php - 在数组中使用变量

arrays - 搜索 Node js数组与变量部分匹配,返回索引或值

javascript - 如果您使用 javascript 生成下拉列表,您仍然可以将其发布在表单中吗

php/mysql 使用多个表创建重复记录

javascript - 如何使用坐标数组获得最大/最小边界

c - 使用数组生成序列?

创建与用户在 C 中输入的数量相等的数据

java - 在Java中的公共(public)数组中按属性对json对象列表进行分组

php - json_encode - JSON.parse() 组合,在 Firefox 中运行良好,但在其他浏览器中失败

php - 为什么带有图像扩展名的文件作为 php 文件执行?