0

我想一一打印所有用户名,它是数组格式,所以我不使用 foreach 循环,而是使用 array_walk() 并且它一一打印所有用户数据,但根据要求,数据应该打印在 html 表中这样定义一个变量 $desc 为空并连接 html 代码(带有用户名的表体表标题),最后 echo $desc 但出现错误:

expected output:


<html> 
<body> 

<h2>Basic HTML Table</h2> 

<table > 
<tr> 
<th>username</th> 

</tr> 
<tr> 
<td>user1</td> 

</tr> 
<tr> 
<td>user2</td> 

</tr> 
<tr><td>user3</td></tr> 
<tr><td>user4</td></tr> 


 <?php 
$users=$this->db->get('users')->result();
$desc = '';
 $desc .= '<table class="table table-hover" id="catgeory_list">
                      <thead>
                        <tr>
             <th>User Name</th>   
        </tr>
                      </thead>
                      <tbody>';
function myfunction($value)
{
  echo $desc .= '<tr><td>'.$value->name.'</td></tr>';
}
$a = (array) $users;
array_walk($a,"myfunction");
$desc .= '</tbody></table>';
?>

如果我不使用表格,它在这里工作的是我在不使用表格的情况下使用的代码

 <?php 
    $users=$this->db->get('users')->result();
    function myfunction($value,$key)
    {
      echo $value->name;
    }
    $a = (array) $users;
    array_walk($a,"myfunction");
    ?>

输出应在使用连接的变量html分配的表中打印用户名$desc

4

1 回答 1

1

您的函数无权访问该$desc变量。有一种方法可以解决这个问题,但即便如此,这样做也没有任何意义echo $desc .= ...

您正在使用array_walk,但我认为这可能是 map 的一个很好的用例。您想要映射数组并将每个元素转换为 HTML 字符串。然后可以将其与 implode 混合以将所有元素作为字符串返回。

例子:

$users = $this->db->get('users')->result();

$users_table = array_map(function ($user) {
    return '<tr><td>' . $user->name . '</td></tr>';
}, $users);

echo '<table> ... '; // open table here.
echo implode('', $users_table);
echo '</table>'; // and finally, close it.

为什么要地图?您经常会拆分生成和输出的过程。这使您可以选择这样做。如果你想让你的原始代码工作,有一个简单的解决方案。完全忘记$desc并坚持回声。呼应桌子打开,然后走阵列,最后桌子关闭。

于 2019-08-11T05:35:04.450 回答