簡體   English   中英

Codeigniter 2.1,PHP - 從鍵值對中獲取隨機數組

[英]Codeigniter 2.1, PHP - get random array from key value pair

我有查詢,我需要從隨機值(隨機行)和限制,比如5個結果,並從主數組(查詢)中減去它們。 我怎樣才能做到這一點?

這是查詢功能:

public function galerija_jedna_slike()
    {
        $galerija = $this->db->order_by('id_galerija', 'RANDOM')->limit(1)->get($this->table)->row();
        $q = " SELECT * FROM galerija_slike
                LEFT JOIN galerije
                ON galerija_slike.galerija_id = galerije.id_galerija
                WHERE galerija_id = $galerija->id_galerija ";
        return $this->db->query($q)->result_array();
    }

我設法得到隨機值,現在我需要從主數組中刪除這些值。 功能:

function array_random_assoc($arr, $num = 1) {
        $keys = array_keys($arr);
        shuffle($keys);

        $r = array();
        for ($i = 0; $i < $num; $i++) {
        $r[$keys[$i]] = $arr[$keys[$i]];
        }
        return $r;
    }

加載整個表:

$gallery =  $this->db->query("SELECT * FROM gallery;");

讓我們從圖庫中選擇五個隨機行:

$max_items = 5;
$num = $query->num_rows();
$row = $query->row(rand(0, $num - 1));
$minus = array(); //store the ids to include

for ($i = 0; $i < $max_items; $i ++)
    $minus[] = $gallery ->row(rand(0, $num - 1));

迭代庫以構建兩個數組,1。畫廊減去隨機行2.隨機行

$data = array();
foreach ($gallery ->result() as $row)
{
    if (in_array($row->id, $minus))
        $data['random'][] = $row
    else
        $data['gallery'][] = $row
}

現在,數組$data['gallery']包含沒有randon行的所有項目。 $data[random]是一個包含隨機行的數組。

你的問題可以解決3部分。

  1. 首先是查詢。 你已經做到了,我將從那里開始。

  2. 您需要在返回的數組范圍內生成5個唯一的整數。 如果返回的結果少於5個,您還必須小心。 這是代碼。

      $random_integer = array(); for( $i=0; $i<5 && $i<(count($a)-1); $i++){ while( 1 ){ $random_value = rand(0, count($a)-1); if( in_array($random_value, $random_integer) ){ continue; } else{ $random_integer[] = $random_value; break; } } } 

現在, $random_integer有5個唯一的隨機整數,在返回結果的范圍內。 如果查詢返回的條目少於6個,則1將用於普通帖子,休息將用於隨機帖子。 您可以在for循環的條件下更改它。 in_array將檢查是否有任何重復的條目。

  1. 最后一部分是在單獨的變量中設置這些隨機查詢,並從主查詢中截斷它們。 你可以這樣做。 比如說,返回的查詢是$main_query

      foreach( $random_integer as $row ){ $random_query[] = $main_query[$row]; unset($main_query[$row]); } $main_query = array_values($main_query); 

unset不會更改數組鍵。 array_values函數將規范化數組鍵。 現在$random_query將包含5個(最大)隨機查詢, $main_query將包含其余查詢。

這應該給出一些想法。 注意:代碼未經過測試。

public function galerija_jedna_slike()
{
    $galerija = $this->db->order_by('id_galerija', 'RANDOM')->limit(1)->get($this->table)->row();
    //query to get only id
    $q = "SELECT id FROM galerija_slike WHERE galerija_id = $galerija->id_galerija ";

    $result = $this->db->query($q)->result_array();

    $ids = array();
    foreach($result as $row){
        $ids[] = $row['id'];
    }

    //shuffle id arrays or other function to randomize
    shuffle($ids);

    $ids = array_slice($ids,0,5);//gets first 5 ids

    $sql = " SELECT * FROM galerija_slike
                    LEFT JOIN galerije
                    ON galerija_slike.galerija_id = galerije.id_galerija
                    WHERE galerija_id = $galerija->id_galerija AND id IN(".implode(',', $ids).")";

    return $this->db->query($sql)->result_array();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM