【问题标题】:array is overwritten by the last element in php数组被php中的最后一个元素覆盖
【发布时间】:2012-04-30 08:31:03
【问题描述】:

$g 中存储的结果是 1 和 2。下面我写的以下代码,我的$array['music'] 只存储了最后一个元素,即 2。但我想要的是在下面执行我的 sql 查询 2 次foreach并将$g的值1和2与mu_id匹配(mu_id是另一个表music的列名)并将第1行和第2行的所有行数据存储到$array['music']

它只存储第二行 (2) 而不是 1,或者在循环内第二次执行时覆盖它。如果有任何逻辑使它起作用,请告诉我。

    foreach($genre as $g)
    {
        echo $g;
        echo "<br>";
        $array['music'] = $m -> where('mu_id', $g ) -> get();
    }

【问题讨论】:

  • 什么是 $g?什么是美元?给你的变量起适当的名字,这样它们就更容易理解了。我们不需要再学习我们的 ABC。
  • @Truth:CI Datamapper 文档在所有示例中都使用单字母变量,所以这可能只是复制这些示例。我同意这是一个坏习惯,但在这种情况下,我会假设 $g 是“流派”,$m 是“音乐”。我也只会使用完整的单词。
  • @madmartigan 我很清楚这一点。我只是在说他不应该自己做,以及在不了解数组基础的情况下盲目复制示例。
  • @Truth:哦,好吧...我会从下一次开始处理...
  • $g 用于流派,$m 用于音乐表(音乐类的对象)。

标签: php arrays foreach codeigniter-datamapper


【解决方案1】:

您每次都重新声明整个数组而不是添加它,请改用它:

foreach($genre as $g)
{
    $array['music'][] = $m->where('mu_id', $g)->get();
}

或者更好,更少的查询:

$array['music'] = $m->where_in('mu_id', $genre)->get();

【讨论】:

  • 非常感谢。由于我是 codeigniter 和 datamapper 的新手,我想知道如何使它工作。这对我来说就像魔术一样。我真的很高兴,因为它现在运行良好。好快的回复啊!!!再次感谢... :)
  • CI 和 DM 都有非常好的文档,请务必经常阅读。也就是说,这只是一个基本的 PHP 错误,PHP 也有非常好的文档,请确保也经常引用它们。
【解决方案2】:

如果您想将所有数据存储在一个数组中,您应该使用$array['music'][] 而不是$array['music']

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多