我有这个阵列:
$tz = array(
'Usa' => '-7',
'Ecuador' => '-5',
'Bolivia' => '-4',
'Uruguay' => '-3',
'London' => '0',
'France' => '2',
'Spain' => '2',
'Germany' => '2',
'Greece' => '3',
'Rusia' => '3',
'Romania' => '3',
'Pakistan' => '5',
'China' => '8'
);
我的目标是从偏移> = 0和< ='3'的那些国家/地区获取一个随机国家/地区。
我试过了:
$country = array_rand($tz);
echo 'Key: "'.$country.'" offset: "'.$tz[$country].'"<br>';
返回 关键:“罗马尼亚”抵消:“+3:00”,但我知道......不是正确的方式。
怎么做?有什么帮助吗?
正如MrRP说这个问题已经解决了
$filtered = array_filter($tz, function($v) { return $v >= 0 && $v <=3; });
$country = array_rand($filtered);
echo 'Key: "'.$country.'" offset: "'.$filtered[$country].'"<br>';
答案 0 :(得分:2)
$filtered = array_filter($tz, function($v) { return $v >= 0 && $v <=3; });
然后您可以在过滤后的数组上使用array_rand
。
答案 1 :(得分:1)
试试这个代码......
$tz = array(
'Usa' => '-7',
'Ecuador' => '-5',
'Bolivia' => '-4',
'Uruguay' => '-3',
'London' => '0',
'France' => '2',
'Spain' => '2',
'Germany' => '2',
'Greece' => '3',
'Rusia' => '3',
'Romania' => '3',
'Pakistan' => '5',
'China' => '8'
);
做{
$t = array_rand($tz);
}
而(!($ TZ [$ t]的&GT; = 0)及及($ TZ [$ t]的&LT; = 3));
回声&#39 ;; print_r($ t);死亡;
答案 2 :(得分:1)
单线太容易了:
$country=array_rand(array_intersect($tz,range(0,3)));
你的回声线:
echo 'Key: "',$country,'" offset: "',$tz[$country],'"<br>';
说明:
创建所需的所需值范围:range(0,3); // creates [0,1,2,3]
创建一系列符合条件的国家/地区:array_intersect($tz,range(0,3));
array('London'=>'0',
'France'=>'2',
'Spain'=>'2',
'Germany'=>'2',
'Greece'=>'3',
'Rusia'=>'3',
'Romania'=>'3'
)
然后从列表中拔出一个随机密钥,完成!
这种方法很有效,不会产生不必要的全局变量。
在MrRP的回答中, array_intersect()
生成与array_filter()
相同的过滤数组。不同之处在于我的方法只会在每次迭代(例如in_array())上执行一个条件运算,而不是在每次迭代时执行两个单独的条件:大于或等于&amp;低于或相等到。
答案 3 :(得分:0)
看看这个。无法完全理解您的查询,但我认为这可能是您想要的。
$tz = array(
'Usa' => '-7',
'Ecuador' => '-5',
'Bolivia' => '-4',
'Uruguay' => '-3',
'London' => '0',
'France' => '2',
'Spain' => '2',
'Germany' => '2',
'Greece' => '3',
'Rusia' => '3',
'Romania' => '3',
'Pakistan' => '5',
'China' => '8'
);
$lowerBound = 0;
$upperBound = 3;
$newDataSet = array();
foreach ($tz as $key => $value) {
if($value<=$upperBound && $value>=$lowerBound) {
$newDataSet[] = $key;
}
}
echo '<pre>';
print_r($newDataSet);
echo '</pre>';
// Fetch random Country from the new list
$rand_keys = array_rand($newDataSet, 1);
echo '<br>Here is a random country : '.$newDataSet[$rand_keys] . "\n";