我有一份与美国各州有关的json文件,其格式如下:
[
{
"name" : "Alabama",
"abbreviation" : "AL"
},
{
"name" : "Alaska",
"abbreviation" : "AK"
},
{
"name" : "Arizona",
"abbreviation" : "AZ"
},
{
"name" : "Arkansas",
"abbreviation" : "AR"
},
{
"name" : "California",
"abbreviation" : "CA"
},
{
"name" : "Colorado",
"abbreviation" : "CO"
},
{
"name" : "Connecticut",
"abbreviation" : "CT"
},
{
"name" : "Delaware",
"abbreviation" : "DE"
}
]我所做的就是解码json文档,然后根据名称和缩写将各自元素中的较小数组拆分。它正确地回显数组的整个列表。
$arrays = json_decode(file_get_contents('states.json'));
foreach ($arrays as $array) {
$state_name = $array->{'name'};
$state_abbreviation = $array->{'abbreviation'};
echo '<p>' . $state_name . ' abbreviates ' . $state_abbreviation . '</p>';
}但我需要能够从大数组(即json文件)中生成特定数量的随机数组。尝试了array_rand,但没有结果。如果列表中有50多个条目,据我所读,mt_rand将被批准,因为它可能更快,更好的随机性。只是我没有在mt_rand上找到太多的信息,除了数字数组。
例如,如何只生成4?
提前感谢!
这是由@EinLinuus提供的小扭曲(切片因子)的解决方案。谢谢,EinLinuus & Michel。
$arrays = json_decode(file_get_contents('states.json'));
shuffle($arrays);
$slice_factor = 4;
$arrays = array_slice($arrays, 0, $slice_factor);
foreach ($arrays as $array) {
$state_name = $array->{'name'};
$state_abbreviation = $array->{'abbreviation'};
echo '<p>' . $state_name . ' abbreviates ' . $state_abbreviation . '</p>';
}发布于 2020-10-11 10:35:42
如果将数组存储在变量$array中,则首先使用shuffle($array)对数组进行洗牌。现在,您有了一个随机数组,您可以使用array_slice($array, 0, x)获得第一个array_slice($array, 0, x)元素;
示例:
$array = [0, 1, 2, 3, 4, 5, 6]; // Your array
shuffle($array); // Shuffle the array, it could be now [4, 1, 6, 2, 5, 0, 3]
$result = array_slice($array, 0, 3); // Get first 3 elements, in this case [4, 1, 6];发布于 2020-10-13 18:57:31
您还可以使用array_rand函数从array.No洗牌或切片中随机选择元素。
$arr = range( 1, 20 );
$pick_random_items = 4;
$randoms = array_rand( $arr, $pick_random_items );https://stackoverflow.com/questions/64302849
复制相似问题