こんにちは。@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;
}
なんだかんだ長いコードになってしまったので、もっとスッキリできそうな予感がします。
時間がある時に見直して修正します。
コメントがあればいただければ幸いです。