重叠错误未定义的变量:desc甚至已经定义为空

时间:2019-08-11 05:20:10

标签: php html array-walk

我想一一打印所有用户名,这是数组格式,所以不是使用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表中使用串联方式打印用户名

1 个答案:

答案 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并坚持回声。回显表的开头,然后遍历数组,最后关闭表。

相关问题