|
|
|
php สุ่มจับคู่จากชื่อโรงเรียน โดยโรงเรียนชื่อเดียวกันไม่ให้คู่กัน |
|
|
|
|
|
|
|
หมายถึงแบบ round robin หรือเปล่าครับ
|
|
|
|
|
Date :
2018-09-01 13:35:44 |
By :
ciockie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่ครับประมาณนี้ล้ เอาแต่คู่หน้าก็พอ
ขอบคุณครับ สอนหน่อย
|
|
|
|
|
Date :
2018-09-02 19:57:32 |
By :
channa01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากให้แสดงออกมาประมาณนี้ โดยการดึงออกจากฐานข้อมูลมาแสดง
|
|
|
|
|
Date :
2018-09-02 21:31:28 |
By :
channa01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แนวคิดครับ
1.นำข้อมูลเข้าจาก sql แบบ array
2.ใช้ array_rand() ออกมาทีละ 2 ตัว
2.1 เขียนเงื่อนไข ทีม 1 == ทีม 2 ให้ random หาทีม 2 ใหม่
3.unset array ที่ออกมาในข้อ 2
4.วนกลับไปข้อ 2 จน array ว่าง
|
ประวัติการแก้ไข 2018-09-03 08:49:18
|
|
|
|
Date :
2018-09-03 08:47:23 |
By :
ciockie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้เก็บค่าลง array แล้ว แต่ผมเขียนเงื่อนไขใน array ไม่เป็น
Code (PHP)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mathgame";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
mysqli_set_charset($conn,'utf8');
$sql = "SELECT * FROM info";
$result = $conn->query($sql);
$users = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$users[] = $row;
}
}else{
}
$conn->close();
header("Content-type: application/json; charset=utf-8");
$t = array_rand($users,2);
var_dump($t);
?>
|
|
|
|
|
Date :
2018-09-03 15:04:43 |
By :
channa01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หืมม ผมก็คิดเหมือนคุณ Clokie นะ ว่าแต่ว่ามันมีวิธีที่ดีกว่านี้ไหมครับ รบกวนแชร์หน่อย
Code (PHP)
$ar = [
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนอนุบาลสกลนคร",
"โรงเรียนบ้านทุ่งโพธิ์",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนอนุบาลบ้านแพง",
"โรงเรียนอนุบาลศรีวิไล",
"โรงเรียนบ้านทุ่งโพธิ์",
"โรงเรียนอนุบาลศรีวิไล"
];
$result = [];
while (count($ar) >= 2) {
$randomed = array_rand($ar, 2);
if ($ar[$randomed[0]] != $ar[$randomed[1]]) {
array_push($result, [$ar[$randomed[0]], $ar[$randomed[1]]]);
unset($ar[$randomed[0]]);
unset($ar[$randomed[1]]);
}
}
echo "<pre>";
var_dump($result);
|
ประวัติการแก้ไข 2018-09-04 11:58:06
|
|
|
|
Date :
2018-09-04 11:46:47 |
By :
DK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขั้นแรกต้องนับจำนวนตัวที่ซ้ำก่อน
หล่ะดึงออกไปจับคู่ จนตัวซ้ำหมดจึงค่อย array_rand() ออก
ไม่งั้นจะมีปัญหาตอนที่ คู่สุดท้ายมันซ้ำกัน
หรืออาจจะแยกตาราง รร. กับ นร.
1.นับจำนวน นร. ที่มีใน รร.
2.สุ่ม รร. ที่มีจำนวน นร.(values) > 0
3.สุ่ม นร. จาก รร.นั้น (school_id)
4.ลดค่าจำนวน นร. 1 (values=values-1)
5.ลบค่าใน array นร.
5.วนจนทุก values ของแต่ละ รร. = 0
|
ประวัติการแก้ไข 2018-09-04 14:13:29
|
|
|
|
Date :
2018-09-04 13:49:59 |
By :
ciockie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หมดไป 4 วันยังทำตามไม่ทันเลยครับ
|
|
|
|
|
Date :
2018-09-06 21:01:39 |
By :
channa01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองผิดลองถูกไปเรื่อยๆครับ
ขั้นแรกหาวิธีกำจัดตัวซ้ำ
|
|
|
|
|
Date :
2018-09-06 21:41:42 |
By :
ciockie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืม จริงๆ ถ้ามีตัวซ้ำ โค๊ดผม จะ infinity loop
แต่ เราแค่ เพิ่มเงื่อนไขการนับ value เข้าไปก็จบละ
ที่เหลือก็ไปจัดการตัวทีซ้ำทีหลังก็ได้ อยู่ที่ว่าจะเอาไปทำไรต่อ
Code (PHP)
$ar = [
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนอนุบาลสกลนคร",
"โรงเรียนบ้านทุ่งโพธิ์",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนอนุบาลบ้านแพง",
"โรงเรียนอนุบาลศรีวิไล",
"โรงเรียนบ้านทุ่งโพธิ์",
"โรงเรียนอนุบาลศรีวิไล",
"โรงเรียนบ้านท่าเรือ ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
"โรงเรียนบ้านท่าเรือ",
];
$result = [];
while (count($ar) >= 2 && count(array_count_values($ar)) > 1) {
$randomed = array_rand($ar, 2);
if ($ar[$randomed[0]] != $ar[$randomed[1]]) {
array_push($result, [$ar[$randomed[0]], $ar[$randomed[1]]]);
unset($ar[$randomed[0]]);
}
}
echo "<pre>";
var_dump($result);
|
|
|
|
|
Date :
2018-09-07 10:53:23 |
By :
DK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชอบ๕ุณมากๆเลยครับ
|
|
|
|
|
Date :
2018-09-07 20:05:02 |
By :
channa01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|