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

时间:2019-04-04 14:31:36

标签: php xml laravel

<?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>

2 个答案:

答案 0 :(得分:0)

您的$array变量包含一个名为CD的单个条目,其中包含一系列书籍。因此,您需要使用嵌套的foreach()或将新变量$books分配给$array["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);

    $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

答案 1 :(得分:0)

我将其转换为纯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>