php 如何创建像彩票号码一样的唯一数组?

wko9yo5t  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(146)

我有一个号码供用户选择6个号码,01至36:

$arr = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36");

user.json示例

$userdata =  [
        {
            "username": "ananda",
            "lottery_number": [
                "09",
                "15",
                "17",
                "22",
                "25",
                "27"
            ],
            "status": "1",
            "id": 1
        },
        {
            "username": "jaka0",
            "lottery_number": [
                "01",
                "08",
                "09",
                "25",
                "16",
                "03"
            ],
            "status": "0",
            "id": 2
        },
        {
            "username": "jaka1",
            "lottery_number": [
                "09",
                "07",
                "06",
                "24",
                "12",
                "21"
            ],
            "status": "0",
            "id": 3
        }
];

如何在user.json中创建不在lottery_number中6个唯一数字数组?
我的逻辑收集所有的用户数,然后寻找最小的数字。但是它工作得不是很好

$arr = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36");

$totalarr = [];
$totalarr = array_merge($totalarr ,$arr);
foreach($userdata as $user) {
$totalarr = array_merge($totalarr ,$user['lottery_number']);
}
$totalarr = array_merge($totalarr ,$arr);
$r = array_filter(array_count_values($totalarr ), function($v) { return $v > 1; });
$key = array_keys($r, min($r));

逻辑如何创建一个由6个唯一数字组成的数组?

4smxwvx5

4smxwvx51#

像这样的东西应该工作。

$arr = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36");
$user_data = json_decode(file_get_contents(__DIR__ . '/user.json'), true);

$in_array = array();

// Join all the numbers that exist into one array

foreach ( $user_data as $user_datum ) {
    $in_array = array_merge($in_array, $user_datum['lottery_number']);
}

// Get an array of numbers that don't exist in the user data 

$not_in_array = array_diff($arr, $in_array);
unset($in_array);

/*
 * Shuffle the array, 
 * then select the first 6 making a random array of unique numbers
 */

shuffle($not_in_array);
$random = array_slice($not_in_array, 0, 6);

// $random is your final array

相关问题