【问题标题】:Could someone clarify unset($row['something'])?有人可以澄清 unset($row['something']) 吗?
【发布时间】:2014-05-21 02:18:27
【问题描述】:

我想澄清一下这段代码:

unset($row['something']);

因为在我的代码中,我使用它从我从查询中获得的结果中删除了一些列。我正在使用它来获取数组并遍历它:

$rows = array();
while($row = $result->fetch_assoc())

我需要这些列来制作其他组合列。后来当我尝试导出到 csv 文件时,它仍然显示未设置的列。应该使用 unset 删除哪个。所以在此期间,我使用 unset 方法删除了几列。

真的希望有人能帮我解决这个问题,因为我不知道如何从我的数组中删除这些列。

更新:

public function getRows()
{
    global $global_db_link;
    $result = $global_db_link->query($this->getQuery());

    $rows = array();
    while($row = $result->fetch_assoc())
    {
    // This is where i use different columns to calculate something 
    // and make a new column out of it
        unset($row['column_header']);       
        $rows[] = $row;
    }
return $rows;

所以这是一个简短的版本。

【问题讨论】:

  • 你能告诉我们你在哪里调用 unset 方法吗?
  • unset 应该按预期工作,除非column_header 不存在;可能是拼写错误或密钥中不必要的空格。在取消设置之前执行var_dump($row) 并确保取消设置正确的列。
  • var_dump 去哪儿了。我刚刚用谷歌搜索了它,但看不到它的去向
  • 它将准确地显示$row 包含的内容,并且您将能够调试您的代码。
  • 如果我添加该代码行 var_dump($row) 我的代码将停止工作

标签: php unset


【解决方案1】:

我的理解是,您从数据库中选择一组列,根据所选列计算一些新列,并且您希望将列列表(一些已选择,一些已计算)导出到 CSV。

我建议你这样做:

public function getRows()
{
    global $global_db_link;
    $result = $global_db_link->query($this->getQuery());

    $rows = array();
    while($row = $result->fetch_assoc())
    {
    // This is where i use different columns to calculate something 
    // and make a new column out of it
        //unset($row['column_header']);      
        // I assume that you add computed elements to row, like:
        $row['computed1'] = $row['selected1'] + $row['selected2'];        
        $rows[] = array($row['computed1'],$row['selected3'],$row['selected4'],$row['computed2']);
    }
return $rows;

这意味着您将创建一个包含要导出到 CSV 的计算/选定列的组合的数组,而不必担心取消任何设置。

【讨论】:

  • 我试过这个,但它不起作用。我仍然收到不必要的列。
  • 你确定你试过这个吗?你说:$rows[] = $row;我说过 $rows[] = array($row['computed1'],$row['selected3'],$row['selected4'],$row['computed2']);这样你就可以准确地说出你需要什么列(你只把你想要返回的列放在这里)
  • 我有这个完全相同的代码。我现在的问题是数据没问题。它没有显示在我的 html 表中,并且我的 csv 导出中没有标题
  • 对于标题,你应该这样做: $rows[] = array('Title1','Title2','Title3','Title4');在第一次调用 getRows 之前。为了在 HTML 表格中显示,您必须共享用于生成 HTML 的代码。
【解决方案2】:

正如你上面所说,Unset 可用于从信息数组中删除信息。但是,您的 while 循环中的 $row 正在从您的数据库中获取信息。为什么您需要取消设置特定行?我什至不确定这是否可能。

最好构建第二个数组,排除指定列以导出到 CSV。

【讨论】:

  • 我需要使用特定的行来创建其他组合行(在我的问题中说)。但我能做的是将未设置的方法放在下一个数组中。如果你说的是真的,也许这会有所帮助。编辑:这不起作用。
  • @user3398922 在使用了那些特定的行之后,你为什么不创建另一个只包含你需要的列的数组呢?
  • 我有办法在另一个答案中做到这一点,但它似乎不起作用。您还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多