Проблема с PHP: не удалось напечатать номера строк, зацикливаясь на ассоциативном массиве - PullRequest
0 голосов
/ 03 июля 2019

Я выполняю базовую операцию синтаксического анализа XML с помощью PHP simplexml_load_file.

Я просмотрел «Каталог CD» и распечатал название песни, исполнителя и т. Д. В таблице HTML. К моему большому размеру, учитывая структуру информации в файле XML, я не смог напечатать номера строк .

Вот код:

<?php
  $catalog = simplexml_load_file('https://www.w3schools.com/xml/cd_catalog.xml');
  $cds = $catalog->CD;
?>

<table class="table table-striped table-bordered">
  <thead>
    <tr>
      <th>#</th>
      <th class="text-left">Song</th>
      <th class="text-left">Artist</th>
      <th class="text-left">Year</th>
      <th class="text-left">Price</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($cds as $k=>$cd) { ?>
    <tr>
      <td><?php echo $k; ?></td>
      <td><?php echo $cd->TITLE; ?></td>
      <td><?php echo $cd->ARTIST; ?></td>
      <td><?php echo $cd->YEAR; ?></td>
      <td><?php echo $cd->PRICE; ?></td>
    </tr>
    <?php } ?>
  </tbody>
</table>

В первом столбце вместо номера строки выводится «CD».

Что я должен изменить, чтобы напечатать номера строк?

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Привет, вот простое решение: просто приведите ваш объект xml в виде строки в новый массив и зациклите его:

<?php
$catalog = simplexml_load_file('https://www.w3schools.com/xml/cd_catalog.xml');
$cds = $catalog->CD;
$customCatalog = array();
foreach ($cds as  $value) {
    $temp = array(
        'TITLE' =>$value->TITLE->__toString() ,
        'ARTIST'=> $value->ARTIST->__toString(),
        'COUNTRY'=>$value->COUNTRY->__toString(),
        'COMPANY'=>$value->COMPANY->__toString(),
        'PRICE'=>$value->PRICE->__toString(),
        'YEAR'=>$value->YEAR->__toString()
    );
    $customCatalog [] = $temp;
}

//print_r($customCatalog);

foreach ($customCatalog as $key => $value) {
    if (isset($value)) {
        echo $key;
        echo $value["TITLE"];
        echo $value["ARTIST"];
        echo $value["COUNTRY"];
        echo $value["COMPANY"];
        echo $value["PRICE"];
        echo $value["YEAR"];
    }
}
?>

Надеюсь, это поможет

0 голосов
/ 04 июля 2019

По предложению Андреаса я сделал $rowCount = 1; и увеличивал его на каждой итерации:

<?php
    $catalog = simplexml_load_file('https://www.w3schools.com/xml/cd_catalog.xml');
    $cds = $catalog->CD;
    $rowCount = 1;
?>

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>My favourite songs</title>
  <meta name="description" content="Songs">
  <meta name="author" content="">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>

<body>
  <div class="panel panel-default table-container">
    <div class="panel-heading clearfix">Great songs</div>
    <div class="panel-body">
      <div class="table-responsive">
        <table class="table table-striped table-bordered">
          <thead>
            <tr>
              <th>#</th>
              <th class="text-left">Song</th>
              <th class="text-left">Artist</th>
              <th class="text-left">Year</th>
              <th class="text-left">Price</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($cds as $k=>$cd) { ?>
            <tr>
              <td><?php echo  $rowCount++; ?></td>
              <td><?php echo $cd->TITLE; ?></td>
              <td><?php echo $cd->ARTIST; ?></td>
              <td><?php echo $cd->YEAR; ?></td>
              <td><?php echo $cd->PRICE; ?></td>
            </tr>
            <?php } ?>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</body>
</html>

Здесь есть phpFiddle .

Тем не менее, существует ли решение, которое включает только массив $catalog?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...