0

我已将 PHP 数组转换为 Codeigniter PHP 函数中的单个选择,如下所示...

function check_week($week_array)
{
    $sql = "SELECT X_id FROM products WHERE date_sub(curdate(), INTERVAL 1 DAY) <= updated_at;";
    $query = $this->db->query($sql, $week_array);
    $week = $query->result_array();
    $weeks = json_encode($week[array_rand($week)]);
    return $weeks;
}

我得到了...的回报

{"X_id":"XXX1AXPJV6"}

我已经把它缩小到一个 id,所以不需要使用循环,我只需要一个简单的动作就可以了。(所以我只想要XXX1AXPJV6作为变量)。此外,我确实尝试为此保留 PHP,并且 Codeigniter 对允许任何转换为​​字符串非常挑剔,因为对该模型的调用来自库文件。

顺便说一句,我的 1 天间隔用于测试,它将是 7

尝试使用...

$weeks2 = $weeks[0]['X_id'];
    return $weeks2;

...得到错误“不能在...中使用字符串偏移作为数组”

4

2 回答 2

2

如果我正确理解了这个问题

$weeks = json_encode($week[array_rand($week)]);

应该

$weeks = reset($week[array_rand($week)]); // returns the value of the first element in the array

希望有帮助。

于 2013-03-19T00:30:34.280 回答
1

如果您只需要一个随机行,您的 SQL 应该只检索一个随机行。

function check_week($week_array)
{
    $sql = "SELECT X_id FROM products WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= updated_at ORDER BY RAND() LIMIT 1;";
    $query = $this->db->query($sql, $week_array);
    $week = $query->row_array();

    return json_encode($week['X_id']);
}

注意查询的变化,以及使用row_array()which 返回单个 key => value 数组,而不是result_array()返回数组数组。

对于它的价值,您可以通过将这一行更改为:

$weeks = json_encode($week[array_rand($week)]['X_id']);

但以上仍然是一个更合适的解决方案。如果您只需要一条记录,请不要检索大量记录。

另外,这个$week_array参数是干什么用的?您将其用作查询绑定,但?在您的查询中没有可放置绑定的位置,这使其毫无意义。

于 2013-03-19T01:07:25.937 回答