Foreach 循环在逻辑上是正确的,但结果是错误的


<?php
            $xml=simplexml_load_file("https://www.w3schools.com/xml/cd_catalog.xml") or die("Error: Cannot create object");
            $json = json_encode($xml);
            $array = json_decode($json,TRUE);
?>
  <table>
                    <tr>
                        <th>TITLE</th>
                        <th>ARTIST</th>
                        <th>COUNTRY</th>
                    </tr>
                    @foreach ($array as $books)
                        @foreach ( $books as $ddd)
                            @foreach (  $ddd as $key => $value)
                        <tr>
                            <td>{{  $value }}</td>
                            <td>{{  $value }}</td>
                            <td>{{  $value }}</td>
                        </tr>
                    @endforeach
                    @endforeach
                    @endforeach
                </table>

我的 foreach 循环结果怎么会像这样?我尝试了各种 foreach 循环、组合,要么得到字符串到数组的转换错误,要么得到未定义的索引,当我尝试为每个循环做两次时,我得到一个数组给定字符串是需要错误。主要是在这里,我使用 json 编码和解码技术将 xml 转换为数组,并为每个循环做了用数据填充表

   <table>
                <tr>
                    <th>TITLE</th>
                    <th>ARTIST</th>
                    <th>COUNTRY</th>
                </tr>
                @foreach ($xml->children() as $books)
                            <tr>
                                <td>{{  $books->TITLE }}</td>
                                <td>{{  $books->ARTIST }}</td>
                                <td>{{  $books->COUNTRY }}</td>

                            </tr>
                        @endforeach
            </table>

您的$array变量包含一个名为 CD 的单个条目,其中包含一个书籍数组。因此,您需要使用嵌套foreach(),或为$array["CD"]分配一个新的变量$books,然后循环访问它:

<?php
    $xml=simplexml_load_file("https://www.w3schools.com/xml/cd_catalog.xml") or die("Error: Cannot create object");
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    $books = $array["CD"];
?>
...
@foreach($books AS $book)
<tr>
    <td>{{ $book["TITLE"] }}</td>
    <td>{{ $book["ARTIST"] }}</td>
    <td>{{ $book["COUNTRY"] }}</td>
</tr>
@endforeach
// OR
@foreach($array AS $booksAlt)
@foreach($booksAlt AS $bookAlt)
<tr>
    <td>{{ $bookAlt["TITLE"] }}</td>
    <td>{{ $bookAlt["ARTIST"] }}</td>
    <td>{{ $bookAlt["COUNTRY"] }}</td>
</tr>
@endforeach
@endforeach

我将其转换为纯PHP,但您应该能够轻松地将其更改回Blade语法。

我认为你只是太深了 1 级。如果您遍历$array然后遍历$track,您应该可以访问所需的所有信息。

使用合理的变量名称将帮助您跟踪层次结构。您正在检索 CD 及其关联的曲目,因此我相应地命名了变量。

<?php
$xml = simplexml_load_file("https://www.w3schools.com/xml/cd_catalog.xml") or die("Error: Cannot create object");
$json = json_encode($xml);
$array = json_decode($json, TRUE);
?>
<pre>
<table>
    <tr>
        <th>TITLE</th>
        <th>ARTIST</th>
        <th>COUNTRY</th>
    </tr>
    <?php foreach ($array as $cd): ?>
        <?php foreach ($cd as $track): ?>
            <tr>
                <td><?php echo $track['TITLE']; ?></td>
                <td><?php echo $track['ARTIST']; ?></td>
                <td><?php echo $track['COUNTRY']; ?></td>
            </tr>
        <?php endforeach; ?>
    <?php endforeach; ?>
</table>
</pre>

最新更新