【问题标题】:Create html table and fill using data in array创建html表并使用数组中的数据填充
【发布时间】:2021-09-03 01:03:24
【问题描述】:

你能帮我解决 php 中的循环问题吗?我已经困惑了几个小时,因为我没有深入了解

所以总的来说,下面的数据是聚类计算的结果 - KMeans。下面的数组是已经分组的数据。

问题在于显示它的时候,因为它对我来说太混乱了。

所以我有一个数组数据,如下所示。

array (size=3)
  0 =>
    array (size=8)
      'Label 1' => int 1
      'Label 2' => int 0
      'Label 3' => int 0
      'Label 4' => int 0
      'Label 5' => int 0
      'Label 6' => int 0
      'Label 7' => int 1
      'Label 8' => int 0
  1 => 
    array (size=8)
      'Label 1' => int 0
      'Label 2' => int 0
      'Label 3' => int 1
      'Label 4' => int 0
      'Label 5' => int 1
      'Label 6' => int 1
      'Label 7' => int 0
      'Label 8' => int 0
  2 => 
    array (size=8)
      'Label 1' => int 0
      'Label 2' => int 1
      'Label 3' => int 0
      'Label 4' => int 1
      'Label 5' => int 0
      'Label 6' => int 0
      'Label 7' => int 0
      'Label 8' => int 1

我想创建一个看起来像这样的表。

Lable Groups
Label 1 C1
Label 2 C3
Label 3 C2
Label 4 C3
Label 5 C2
Label 6 C2
Label 7 C1
Label 8 C3

其中数组 0.1,2 将用于识别 C1、C2、C3。所以

array 0 = C1
array 1 = C2
array 2 = C3

Saya sudah mencoba seperti ini,tetapi hasil yang diharapkan membingungkan dan sejak itu,hanya macet di sini

// $dataset->count() = 8
for ($i=0; $i<$dataset->count(); $i++){ 
    
    // $dataset->label($i) = get lable
    echo $dataset->label($i) . "<br>";

    // $results->count() = 3
    for ($j=0; $j<$results->count(); $j++){ 
        if ($dataset->label($i) == array_keys($results->offsetGet($j))[$i]){

            // $results->offsetGet($j) = contains the array above
            echo $results->offsetGet($j)[array_keys($results->offsetGet($j))[$i]];
            echo "<br>";
        }

    }
    echo "<br>";
}

已经是这样编写的代码的结果, 达到表格中的最终结果对我来说真的很困惑。

Label 1
1
0
0

Label 2
0
0
1

Label 3
0
1
0

Label 4
0
0
1

Label 5
0
1
0

Label 6
0
1
0

Label 7
1
0
0

Label 8
0
0
1

所以这样想来判断标签是否属于哪个组 因此数组键为 0.1,2 以指定 C1、C2、C3,例如 更准确地说,每个标签的值 1 来确定组所属的位置;每个标签的值为 0 表示不是该组的成员。

0 => 'Label 1' => 1 // then it is a member of C1, and if
0 => 'Label 2' => 0 // is not a member of C1;
1 => 'Label 3' => 1 // then it is a member of C2
2 => 'Label 2' => 1 // and now label 2 is a member of C3
[
    0 => [
       'Label 1' => 1, // member C1
       'Label 2' => 0,
       'Label 3' => 0,
        . . .
    ],
    1 => [
       'Label 1' => 0,
       'Label 2' => 0,
       'Label 3' => 1, // member C2
        ...
    ],
    2 => [
       'Label 1' => 0,
       'Label 2' => 1, // member C3
       'Label 3' => 0,
       ...
    ]
]

【问题讨论】:

  • 所以每个标签只能分配给一个组?您有没有尝试任何东西可以向我们展示?
  • 根据您提供给我们的数据,我们不清楚输出应该是什么。你也说你被你的循环卡住了,但没有循环..
  • 我已经更新了我的问题,希望你能理解并帮助我
  • 您给定的数组与所需的输出不一致:Label 2 =&gt; C3,其中数组中没有Label 2 =&gt; 2。所以要么调整你的桌子或阵列。
  • 啊,现在我明白了。 Data 数组的键也是 Group 数组的键。如果标签在 Data 数组中设置为 1,则分配组名

标签: php html loops if-statement html-table


【解决方案1】:

使用foreach 循环遍历第一个子数组,扩展语法使您可以访问键和值。如果值为 1,那么您希望在第二列中输出 C1。使用key访问另外两个子数组中对应的值,根据是否为1输出C2/C3

<table>
  <thead>
    <tr>
      <td>Label</td>
      <td>Group</td>
    </tr>
  </thead>
  <tbody>
    <?php foreach($data[0] as $label => $value): ?>
    <tr>
      <td><?php echo $label; ?></td>
      <td><?php
        if($value == 1) { echo 'C1'; }
        if($data[1][$label] == 1) { echo 'C2'; }
        if($data[2][$label] == 1) { echo 'C3'; }
      ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>

减少数据集的实时示例:https://3v4l.org/qb3FA

【讨论】:

  • 嗨朋友们,如果组的数量增加了怎么办,在我的情况下可能只有C1, C2, C3。也许将来会有C4, C5,甚至只是C1 and C2,它会显示一个错误。
  • 你可以先确定你有多少个子数组,然后在那个地方的另一个循环中执行这些检查。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2020-01-18
  • 2019-02-17
  • 1970-01-01
  • 2017-03-22
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多