我想一一打印所有用户名,这是数组格式,所以不是使用foreach循环,而是使用array_walk(),它一一打印所有用户数据,但根据要求,数据应以html打印表 因此将一个变量$ desc定义为空并连接html代码(带有用户名的表主体表标题),最后回显$ 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
表中使用串联方式打印用户名
答案 0 :(得分: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
并坚持回声。回显表的开头,然后遍历数组,最后关闭表。