From e909b48fea2bb72f9ac648e16e531e9509b686bc Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 4 Oct 2018 01:08:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9C=A0=ED=8B=B8=EB=A6=AC=ED=8B=B0=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EB=93=A4=20=EC=9D=BC=EB=B6=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95.=20=EB=9E=9C=EB=8D=A4=EA=B0=92=20=EB=BD=91=EA=B8=B0?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=20=ED=95=98=EB=82=98=20=EB=8D=94=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sammo/Json.php | 2 +- src/sammo/Session.php | 16 ++++------------ src/sammo/Util.php | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/sammo/Json.php b/src/sammo/Json.php index 6db51d6f..0c4797b7 100644 --- a/src/sammo/Json.php +++ b/src/sammo/Json.php @@ -19,7 +19,7 @@ class Json $value = Util::eraseNullValue($value); } - if(($flag & static::EMPTY_ARRAY_IS_DICT) && $value === []){ + if($value === [] && ($flag & static::EMPTY_ARRAY_IS_DICT)){ $value = (object)null; } return json_encode($value, $rawFlag); diff --git a/src/sammo/Session.php b/src/sammo/Session.php index ecf9b9c5..56b7661e 100644 --- a/src/sammo/Session.php +++ b/src/sammo/Session.php @@ -311,13 +311,9 @@ class Session * 로그인 유저의 전역 grade를 받아옴 * @return int|null */ - public static function getUserGrade(bool $requireLogin = false, string $exitPath = '..') + public static function getUserGrade($actionOnError = '..') { - if ($requireLogin) { - $obj = self::requireLogin($exitPath); - } else { - $obj = self::getInstance(); - } + $obj = self::requireLogin($actionOnError); return $obj->userGrade; } @@ -327,13 +323,9 @@ class Session * * @return int|null */ - public static function getUserID(bool $requireLogin = false, string $exitPath = '..') + public static function getUserID($actionOnError = '..') { - if ($requireLogin) { - $obj = self::requireLogin($exitPath); - } else { - $obj = self::getInstance(); - } + $obj = self::requireLogin($actionOnError); return $obj->userID; } diff --git a/src/sammo/Util.php b/src/sammo/Util.php index 4fe5c180..42c73fc7 100644 --- a/src/sammo/Util.php +++ b/src/sammo/Util.php @@ -442,6 +442,9 @@ class Util extends \utilphp\util { $sum = 0; foreach ($items as $value) { + if($value <= 0){ + continue; + } $sum += $value; } @@ -458,6 +461,36 @@ class Util extends \utilphp\util return key($items); } + /** + * 각 값의 비중에 따라 랜덤한 값을 선택. + * + * @param array $items 각 수치와 비중. [값, weight] 으로 보관 + * + * @return object 선택된 랜덤 값의 첫번째 값 + */ + public static function choiceRandomUsingWeightPair(array $items) + { + $sum = 0; + foreach ($items as [$item, $value]) { + if($value <= 0){ + continue; + } + $sum += $value; + } + + $rd = self::randF()*$sum; + foreach ($items as [$item, $value]) { + if ($rd <= $value) { + return $item; + } + $rd -= $value; + } + + //fallback. 이곳으로 빠지지 않음 + end($items); + return $items[key($items)][0]; + } + /** * 배열의 아무거나 고름. Python의 random.choice() * @@ -470,6 +503,9 @@ class Util extends \utilphp\util return $items[array_rand($items)]; } + /** + * fqn 클래스 경로에서 클래스 이름을 받아옴 + */ function getClassName(string $classpath) { if ($pos = strrpos($classpath, '\\')) return substr($classpath, $pos + 1);