2014-11-05 192 views
-1

陣列隨機我有一個數組,看起來像這樣:獲取信息從PHP

Array ( 
[0] => Array ([id] => 1 [title] => Tv [cat] => 1 [value] => 100) 
[1] => Array ([id] => 2 [title] => Laptop [cat] => 1 [value] => 200) 
[2] => Array ([id] => 3 [title] => Phone [cat] => 1 [value] => 100) 
[3] => Array ([id] => 4 [title] => Painting [cat] => 2 [value] => 100) 
) 

我想從有1只貓和值100的陣列中的一個獲得信息,但我希望它是我得到的兩個隨機女巫。

我該怎麼做?

+2

將這些元素獲取到數組中。然後從該數組中獲取一個隨機值。 – 2014-11-05 20:20:25

回答

1
<? 
    $info = array(
    array('id' => 1, 'title' => 'Tv',  'category' => '1', 'value' => 100), 
    array('id' => 2, 'title' => 'Laptop', 'category' => '1', 'value' => 200), 
    array('id' => 3, 'title' => 'Phone', 'category' => '1', 'value' => 100), 
    array('id' => 4, 'title' => 'Painting', 'category' => '2', 'value' => 100), 
    ); 

    $candidates = array(); 

    foreach ($info as $arr) { 
    if ($arr['category'] == '1' && $arr['value'] == 100) { 
     $candidates[] = $arr; 
    } 
    } 

    $chosen = $candidates[array_rand($candidates)]; 

    var_dump($chosen); 
?> 
+0

所以我試過你的代碼,如果我只是複製並粘貼它,沒問題。但如果信息數組是從sql結果創建的,我會得到:警告:非法字符串偏移'貓'在... 爲什麼? – Legarndary 2014-11-05 21:14:30

+1

@Legarndary「cat」鍵似乎不存在於你的SQL結果中。 'var_dump'你的SQL結果確保它是 – sjagr 2014-11-05 21:27:09

+0

,但它說:[「cat」] => string(1)「2」 – Legarndary 2014-11-05 21:38:39

0

假設你的陣列是$array

function filterByCatAndValue($a) { 
    return ($a['cat'] == 1 && $a['value'] == 100); 
} 

$filteredArray = array_filter($array, "filterByCatAndValue"); 
shuffle($filteredArray); 
$randomElement = array_shift($filteredArray); 
0

下面是基於以下多維數組在我的建議是:

<?php 
$multi_dim = array(
array('id' => 1, 'title' => 'Tv',  'cat' => 1, 'value' => 100), 
array('id' => 2, 'title' => 'Laptop', 'cat' => 1, 'value' => 200), 
array('id' => 3, 'title' => 'Phone', 'cat' => 1, 'value' => 100), 
array('id' => 4, 'title' => 'Painting', 'cat' => 2, 'value' => 100), 
); 
$max = 0; 
$call_back = function($a) use(&$max){ 
    if ($a['cat'] == 1 && $a['value'] == 100){ 
     $max++; 
     return $a; 
    } 
}; 

$filtered = array_values(array_filter($multi_dim,$call_back)); 
$rand = mt_rand(0, $max -1); // adjust $max for zero-based array indexing 
var_dump($filtered[$rand]); 
?> 

Array_filter過濾掉那些子陣列,其貓(egory)是1,其值是100.回調函數是一個使用變量$ max的閉包,它跟蹤返回的子數組的數量。將過濾的數組傳遞給array_values將導致$ filtered的鍵與從零開始的索引是連續的。該手冊指出mt_rand是一個更好的隨機函數(請參閱http://php.net/mt_rand)。然後我使用該函數的結果作爲過濾數組的索引。