【问题标题】:Extracting sub arrays from a two dimensional array for each element and displaying them in a table using KnockoutJS从每个元素的二维数组中提取子数组并使用 KnockoutJS 在表格中显示它们
【发布时间】:2023-03-27 01:22:02
【问题描述】:

我在 PHP 中使用以下代码从 MySQL 中提取数据:

<?php
require("connect.php");
$sql = "SELECT `inn_lay_list`, `inner_layer` FROM `da_customer_auto_inner` 
where `mpcode` = 'qf017'";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($result)) {
    $data1 = $row['inn_lay_list'];
    $data2 = $row['inner_layer'];
}

$parts1 = explode(';',$data1);
$parts2 = explode(';',$data2);
$layer_cnt = count($parts1);
$array_inner = array_chunk($parts2, 8);

echo json_encode($parts1);
echo json_encode($array_inner);

mysqli_close($conn);
?>

我得到的结果是:

["001","011","021","031"]

[["1","2","3","4","5","6","7","8"], ["11","12","13" ,"14","15","16","17","18"], ["21","22","23","24","25","26","27" ,"28"],[31","32","33","34","35","36","37","38"]]

对于第一个数组中的每个元素,第二个数组(二维数组)中都有一个子数组。 现在我想使用表格在 HTML 页面中显示它。我正在尝试将 KnockoutJS “foreach” 选项与命名模板一起使用:

<script>
function MyViewModel() {
    this.layer = [{
        name: "<?=@$parts1[0]?>",
        layer_data: "<?=@$array_inner[0]?>"
    },
    {
        name: "<?=@$parts1[1]?>",
        layer_data: "<?=@$array_inner[1]?>"
    },
    {
        name: "<?=@$parts1[2]?>",
        layer_data: "<?=@$array_inner[2]?>"
    },
    {
        name: "<?=@$parts1[3]?>",
        layer_data: "<?=@$array_inner[3]?>"
    }]
}
ko.applyBindings(new MyViewModel());
</script>

<table class="table table-bordered">
    <thead>
    <tr>
      <td>Layer</td>
      <td>P2P</td>
      <td>P2T</td>
      <td>T2T</td>
      <td>Track Width</td>
      <td>PTH To Cu</td>
      <td>NPTH To Cu</td>
      <td>PTH AR</td>
      <td>Via AR</td>
    </tr>
    </thead>
    <tbody data-bind="template:{name:'layer-template', foreach:layer}"> 
    </tbody>
</table>
<script type="text/html" id="layer-template">
<tr>
    <td data-bind="text: name"></td>
    <td data-bind="text: layer_data[0]"></td>
    <td data-bind="text: layer_data[1]"></td>
    <td data-bind="text: layer_data[2]"></td>
    <td data-bind="text: layer_data[3]"></td>
    <td data-bind="text: layer_data[4]"></td>
    <td data-bind="text: layer_data[5]"></td>
    <td data-bind="text: layer_data[6]"></td>
    <td data-bind="text: layer_data[7]"></td>
</tr>
</script>

我希望我的输出如下:

【问题讨论】:

  • $arr[0] 。就是这样
  • $array=[[1,2,3], [4,5,6], [7,8,9]];然后 $array[0];
  • 到目前为止你尝试过什么?向我们展示您的代码以帮助您改进它。
  • $arr[0] 是数组。你试图回应它。你不能回显数组。像这样尝试 $layer_data = implode(',',$arr[0]); @DeveshN。
  • $array[0] 主数组的第一个键

标签: php arrays knockout.js


【解决方案1】:

只需执行以下操作:

$array = [[1,2,3], [4,5,6], [7,8,9]];
$array[0];

【讨论】:

    【解决方案2】:

    使用current()函数返回数组中当前元素的值。

    <?php
    
    $array=[[1,2,3], [4,5,6], [7,8,9]];
    
    var_dump(current($array));
    
    ?>
    

    【讨论】:

      【解决方案3】:

      这样做很简单:

      $array=[[1,2,3], [4,5,6], [7,8,9]]; 
      print_r($array[0]);
      
      If you want read all:
      foreach($array as $arr){
      print_r($arr);
      }
      

      【讨论】:

      • 正如您在 =@$arr[0] ?> 中评论的那样,您应该删除 @ @Devesh N。
      【解决方案4】:

      您可以使用array_shift

      $tab = array(array(1,2,3), array(4,5,6), array(7,8,9));
      $b = array_shift($tab);
      print_r($b);
      

      【讨论】:

        【解决方案5】:

        正如您在问题中所说,数组是 json 格式,所以首先您需要使用 json_decode() 将该 json 解码为数组。那么你可以直接使用$array[0]。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 1970-01-01
          • 2013-04-04
          相关资源
          最近更新 更多