PHP 检查数组是否包含每个 tot 元素的特定值

标签 php arrays random

我有一个像下面这样的长数组。 我需要实现的是检查此数组中是否每 6 个元素都找到值 1。如果未找到,则必须随机添加到 6 个元素之一(通过替换任何原始值)。另外,如果每 6 个元素发现该值超过 2 次,则需要将其中一个替换为另一个随机数。

我已经创建了能够随机生成以下数组的代码。 但是我不知道如何检查数组中的每 6 个元素是否包含值 1,如果不是如何随机添加它,如果发现超过 1 次如何用另一个随机数替换其中一个值。

我知道这很难理解。我希望有人能够提供帮助。

简而言之,最终结果应该是:

此数组的每 6 个元素必须至少包含一次值 1,且不超过一次,每 6 个元素位于随机位置。

这是我到目前为止所做的,这段代码生成了下面的数组:

/*
We select the elements to add randomly in the final array from a DB table
*/
    $elements = parent::$db->select('_matrix_elements', 'element_id', NULL, 'ORDER BY RAND()');
    $count = count($elements) - 1; //count the total number of the elements -1 to start from zero

    $columns = 6;
    $lines = 8;

    //generating the final array
    for ($a = 1; $a <= $lines; $a++) {
        for ($b = 1; $b <= $columns; $b++) {
            $rand = rand(1,$count);
            $line['position_'.$a.'_' . $b] = $elements[$rand]['element_id'];
        }
    }

Array
(
    [position_1_1] => 14
    [position_1_2] => 6
    [position_1_3] => 5
    [position_1_4] => 6
    [position_1_5] => 9
    [position_1_6] => 8
    [position_2_1] => 11
    [position_2_2] => 7
    [position_2_3] => 6
    [position_2_4] => 1
    [position_2_5] => 7
    [position_2_6] => 5
    [position_3_1] => 14
    [position_3_2] => 5
    [position_3_3] => 4
    [position_3_4] => 7
    [position_3_5] => 4
    [position_3_6] => 10
    [position_4_1] => 6
    [position_4_2] => 2
    [position_4_3] => 2
    [position_4_4] => 1
    [position_4_5] => 7
    [position_4_6] => 6
    [position_5_1] => 3
    [position_5_2] => 7
    [position_5_3] => 8
    [position_5_4] => 10
    [position_5_5] => 3
    [position_5_6] => 2
    [position_6_1] => 8
    [position_6_2] => 2
    [position_6_3] => 10
    [position_6_4] => 2
    [position_6_5] => 10
    [position_6_6] => 9
    [position_7_1] => 6
    [position_7_2] => 10
    [position_7_3] => 4
    [position_7_4] => 8
    [position_7_5] => 1
    [position_7_6] => 5
    [position_8_1] => 2
    [position_8_2] => 7
    [position_8_3] => 4
    [position_8_4] => 7
    [position_8_5] => 9
    [position_8_6] => 13
)

最佳答案

  1. 将列表拆分成一个二维数组,每个一维数组有 6 个元素
  2. 统计6元素子数组中每个元素出现的次数
  3. 如果数组中没有,则随机生成一个元素1
  4. 如果数组中有2个或更多
  5. 用一个随机数(不是一个)替换,直到只有一个
  6. 将最终的子数组添加到一维数组
  7. 重复二维数组中的所有子数组
$list_2d = array_chunk($list, 6); 
$final_list = array();
foreach ($list_2d as $array) { 
    $count = array_count_values($array);
    if (!array_key_exists(1, $count))
        $array[mt_rand(0, 5)] = 1;
    else if ($count[1] > 1)
        for ($i = 1; $i <= $count[1] - 1; $i++)
            $array[array_search(1, $array)] = mt_rand(2, 15);
            //Use whatever random number you want here, as long as it's not 1
    $final_list = array_merge($final_list, $array);
}

关于PHP 检查数组是否包含每个 tot 元素的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867509/

相关文章:

php - 不同地区的锂电路线

php - 单击提交按钮后如何在 jquery 中显示错误

java - 从字符串二维数组中获取元素

c++ - Uniform_real 不接受 numeric_limits::lowest()

c - 如何以随机顺序访问 C 数组以确保所有元素最多访问一次

c - 随机数组在第一个元素之后给出无效输出 [C]

PHP 替代控制结构,有什么缺点吗?

php - 从 PHP 查询表(配置文件?)

c - 在 C 中求和并查找数组的非零项

c++ - 使用整数 key 实现加密算法 : how to store the key during the process