【问题标题】:Is there a short and sweet function toString a single jSON object or similar in my example?在我的示例中,是否有一个简短的函数 toString 单个 jSON 对象或类似对象?
【发布时间】:2026-02-08 04:40:01
【问题描述】:

我已将 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,所以不需要使用循环,我只需要一个简单的 id。 (所以我只想要 XXX1AXPJV6 作为变量)。此外,我确实尝试为此保留 PHP,并且 Codeigniter 对允许任何转换为​​字符串非常挑剔,因为对该模型的调用来自库文件。

顺便说一句,我的 1 天间隔是为了测试,应该是 7

尝试使用...

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

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

【问题讨论】:

  • 所以你想让check_week返回一个字符串?还是数组?
  • @MarcAudet 是的。如果可能,特别是“XXX1AXPJV6”一个 PHP 字符串。

标签: php mysql json codeigniter


【解决方案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(),而不是返回数组数组的 result_array()

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

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

但是上面还是一个比较合适的解决方案。如果只需要一条记录,请不要检索大量记录。

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

【讨论】:

  • +1 以获得非常好的答案。唯一的问题是,我想允许另一个分叉来处理额外的数据和其他一些事情,不幸的是我无法在这个上分享。
  • 您询问了如何让您的函数将指定的索引作为 json 编码的字符串返回。对于你想如何改变它,我不是一个读心者。使用 reset() 是一个愚蠢的解决方案(我什至展示了如何使用原始代码解决它)。
【解决方案2】:

如果我正确理解问题

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

应该是

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

希望有帮助。

【讨论】:

  • 如果您不介意更改原始数组,array_shift 将工作以及重置。
  • 看起来 reset() 正是我需要的,而 array_shift 让我到达那里。
最近更新 更多