我在Codeigniter PHP函数中将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,所以不需要使用循环,我只需要在一个简单的移动中使用id。(所以我只想要XXX1AXPJV6作为一个变量)。此外,我确实尝试保持在PHP和Codeigniter是挑剔的允许任何转换为字符串,由于调用这个模型是从一个库文件。
顺便说一句,我的1天间隔是用于测试的,它将是7
尝试使用…
$weeks2 = $weeks[0]['X_id'];
return $weeks2;
…得到错误"不能使用字符串偏移量作为数组在…"
如果我理解对了问题
$weeks = json_encode($week[array_rand($week)]);
应该$weeks = reset($week[array_rand($week)]); // returns the value of the first element in the array
如果您只需要一个随机行,那么您的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()
返回单个键=>值数组,而不是result_array()
返回数组的数组。
无论如何,您可以通过将这一行更改为:
来获得所需的结果。$weeks = json_encode($week[array_rand($week)]['X_id']);
但以上仍然是一个更合适的解决方案。如果你只需要一条记录,就不要检索很多记录。
另外,$week_array
参数是干什么用的?您正在使用它作为查询绑定,但是在您的查询中没有用于绑定的?
位置,使其毫无意义。