LoginSignup
0
0

More than 3 years have passed since last update.

項目をランダム選択しその結果(good/bad)もランダムにする。ただしbadの上限あり

Last updated at Posted at 2020-11-13

こんにちは。@mashiです。

この記事は一応この記事( https://qiita.com/mashi/items/93a088c90839251ef820 )の続きです。

【大項目/小項目/結果(good/bad)という表があり、各大項目にて1つの小項目を選択し、good/badもランダムにする】というものです。

文章だけではよく分からないため、下記の出力イメージです。
技術・勤怠・コミュニケーションにてそれぞれ小項目1つをランダムで選び、goodかbadもランダムにするというものです。
badの個数も0~1の間でランダムです。

大項目 小項目 good bad
技術 速度
技術 品質
技術 納期
技術 ドキュメント
勤怠 遅刻
勤怠 勤怠忘れ
コミュニケーション 挨拶
コミュニケーション タスク共有
コミュニケーション 会議内容

前回のコードを用いて実装すると下記のような感じになりました。(実際に動作しているコードとは異なるためちょこちょこ端折ってます)


// ランダム出力する大項目の個数
$major_items_num = 3;
// badの数は0~1個
$bad_num = rand(0, 1);
// 大項目の配列
$major_items_array = array('skill', 'attendance', 'communication');
$bad_major_items_array = array();

if ($bad_num > 0) {
    $random_array = array();
    shuffle($major_items_array);

    // badの大項目
    $bad_major_items_array[] = array_slice($major_items_array, 0, $bad_num);
}

for ($i = 0; $i < count($major_items_array); $i++) {
    // 各大項目にて小項目の選択とgood/badの決定
    if (in_array($major_items_array[$i], $bad_major_items_array, true)) {
        $evalution = 'bad';
    } else {
        $evalution = 'good';
    }
    // 〇を付けるセルの位置(選択された小項目かつgood/bad)
    $cell_coordinate = getMajorItemCell($major_items_array[$i], $evalution);
}

function getMajorItemCell ($item_name, $evalution) {
    $col_num = '';
    $row_num = '';
    $skill_base_row = [技術の開始行];
    $attendance_base_row = [勤怠の開始行];
    $communication_base_row = [コミュニケーションの開始行];

    if ($evalution == 'bad') {
        $col_num = [badの列番号];
    } else {
        $col_num = [goodの列番号];
    }

    // 選択された小項目の行番号
    switch ($item_name) {
        case 'skill': // 技術
            $row_num = rand(0, 1) + $skill_base_row;
            break;
        case 'attendance': // 勤怠
            $row_num = rand(0, 4) + $attendance_base_row;
            break;
        case 'communication': // コミュニケーション
            $row_num = rand(0, 1) + $communication_base_row;
            break;
        default:
            break;
    }

    $cell_coordinate = $col_num . $row_num;

    return $cell_coordinate;
}

なんだかんだ長いコードになってしまったので、もっとスッキリできそうな予感がします。
時間がある時に見直して修正します。

コメントがあればいただければ幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0