尝试使用 foreach 创建具有 php 的动态 html 元素时出错

Error while trying to create dynamic html elements with php using foreach

当我尝试使用 PHP 在 HTML 中动态创建一些框时,出现以下错误:

Invalid argument supplied for foreach()

这是我的代码:

<?php
    $sql = 'call getservers()';
    $retval = mysqli_query( $conn,$sql );
    if(! $retval ) {
        die('Could not get data.');
    }
    while($row = mysqli_fetch_array($retval)) {
    $server_array = $row['result'];
    }
    foreach($server_array as $value) {
    echo <<<HEREDOC
            <div class="card card-custom">
                                            <div class="card-header">
                                                <div class="card-title">
                                                    <span class="card-icon">
                                                        <i class="fas fa-server text-primary text-primary"></i>
                                                    </span>
                                                    <h3 class="card-label">Server 1 
                                                    <small>192.168.1.1</small></h3>
                                                </div>
                                                <div class="card-toolbar">
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-danger mr-2">
                                                        <i class="flaticon2-drop"></i>
                                                    </a>
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-success mr-2">
                                                        <i class="flaticon2-gear"></i>
                                                    </a>
                                                    <a href="#" class="btn btn-sm btn-icon btn-light-primary">
                                                        <i class="flaticon2-bell-2"></i>
                                                    </a>
                                                </div>
                                            </div>
                                            <div class="card-body">No Description Given.</div>
                                        </div>
HEREDOC;
    }
?>

(MySql正确查询returnsJSON数组)

我们将不胜感激。

您应该 json_decode($server_array, true) 获得一个可以循环访问的关联数组。

<?php
$server_array = '[{"server_name": "Test Server 1", "server_ip": "192.168.1.2", "server_hostname": "testserver1.example.com"},{"server_name": "Test Server 2", "server_ip": "192.169.1.105", "server_hostname": "testserver2.example.com"}]';
$server_array = json_decode($server_array, true);

foreach($server_array as $value) {
    foreach($value as $item) {
        echo <<<HEREDOC
            $item;
HEREDOC;
    }
}

输出 Test Server 1; 192.168.1.2; testserver1.example.com; Test Server 2; 192.169.1.105; testserver2.example.com;

工作demo