![](/img/trans.png)
[英]How to get A Specifc Key => value pair from an assosative array in 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部分。
首先是查詢。 你已經做到了,我將從那里開始。
您需要在返回的數組范圍內生成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
將檢查是否有任何重復的條目。
最后一部分是在單獨的變量中設置這些隨機查詢,並從主查詢中截斷它們。 你可以這樣做。 比如說,返回的查詢是$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.