0

私はPHP配列をCodeigniterPHP関数の単一の選択に次のように変換しました...

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"}

私はすでにこれを1つのIDに絞り込んでいるので、ループを使用する必要はありません。1回の簡単な移動で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

ランダムな行が1つだけ必要な場合、SQLはランダムな行を1つだけ取得する必要があります。

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']);

しかし、上記は依然としてより適切な解決策です。必要なレコードが1つだけの場合は、大量のレコードを取得しないでください。

また、$week_arrayパラメータは何ですか?これをクエリバインディングとして使用していますが?、バインディングをクエリに含める場所がないため、意味がありません。

于 2013-03-19T01:07:25.937 に答える