【问题标题】:Geeting error Undefined variable: desc even already defined as empty得到错误未定义的变量:desc甚至已经定义为空
【发布时间】:2019-08-11 05:20:10
【问题描述】:

我想一一打印所有用户名,这是数组格式,所以我不使用 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 变量中分配

【问题讨论】:

  • myfunction 无法访问global 变量$desc 并且在函数内部它是未定义的。
  • $desc分配到函数中
  • 让我们知道接下来会发生什么
  • @Nipun Tharuksha 是的,根据您的建议,我使用 global 关键字没有收到任何错误,但输出不在 html 表中,数据也重复
  • 数组遍历在这里不是正确的方法,您应该使用 foreach 循环

标签: php html array-walk


【解决方案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 并坚持回声。回显表打开,然后遍历数组,最后关闭表。

【讨论】:

  • 不以 html 表格格式打印,如表格标题(用户名)和该标题下方的用户名应该出现
  • 答案不包含您的完整 HTML。表打开和关闭语句是您必须更新的内容。我选择不以此来衡量答案,但您已经有了代码。只需将它们替换为您已经发布的表格 HTML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2014-10-09
  • 1970-01-01
  • 2023-04-11
  • 2012-04-20
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多