下面是基於以下多維數組在我的建議是:
<?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)。然後我使用該函數的結果作爲過濾數組的索引。
將這些元素獲取到數組中。然後從該數組中獲取一個隨機值。 – 2014-11-05 20:20:25