자바스크립트 카렌다

폼 클릭시 카렌다 팝업하여 날짜 선택

1. 개요
Calendar 라이브러리는 사용자에게 쉽고 수월하게 날짜 형식을 입력받기 위해 만들어진 것입니다.
Calendar 라이브러리는 2가지 형식이 있습니다.
첫번째는 iframe을 이용한 형식, 두번째는 단순히 레이어만을 이용한 형식입니다.
이 두가지의 차이는 첫번째의 경우에는 iframe을 이용하여 날짜 입력을 위해 표시되는 달력이
select box 등의 z-index(상위값)이 조절이 안되는 개체의 뒤로 숨어버리는 현상이 없는 것이 장점이며,
두번째의 경우는 iframe을 이용한 방식보다 가벼우며, frame의 자바스크립트 통신에서 생길 수 있는 단점들을
가지지 않게 되는 것이 장점입니다.
상황에 따라 두가지 중, 원하는 라이브러리를 선택하시면 되겠습니다.

2. 날짜 형식의 입력방식
1. iframe 방식
달력을 loading하기 위하여 다음과 같은 구문을 작성합니다.
다음의 구문은 body 태그 안의 아무곳에나 위치시켜 주시면 되겠습니다.

이제, 사용자가 입력할 날짜 폼에서 달력을 보여줘야겠지요.
다음과 같이 onfocus 인자에 달력 클래스를 호출해주면 되겠습니다.

2. layer 방식
달력을 loading하기 위하여 다음과 같은 구문을 작성합니다.
일반적인 자바스크립트 라이브러리이므로 대게 head 태그 내에, 또는 원하시는 아무곳에나 위치시켜주시면 됩니다.

이제, 사용자가 입력할 날짜 폼에서 달력을 보여줘야겠지요.
다음과 같이 onfocus 인자에 달력 클래스를 호출해주면 되겠습니다.
1168855560.tgz

자바스크립터 랜덤 배너 출력 원하는 갯수만큼

등록된 개수에 한하여 출력할 배너 개수 만큼 중복 없이 랜덤 하게 뽑아 줍니다.
사실상 따지자면 규칙이 있는 배너 출력입니다.

배열 스크립트 종합선물세트

http://mygony.com
http://mygony.com/tt/index.php?pl=84&nc=1

두번째 종합선물세트.
구현이 그다지 어려운 것들은 아니지만, 가끔 사용하다보면 귀찮아질때가 있는 배열관련 스크립트입니다. 대부분 php 함수의 명명규칙을 따랐으므로, 어떤 역할을 하는건지 구체적으로 알고 싶다면 PHP 함수에서 Array Functions 장을 참고하면 됩니다.

//
// Array method library
// by 행복한고니 (20041012)
//

// 배열에 검색한 값이 있으면 인덱스 번호를 리턴, 없으면 -1을 리턴
Array.prototype.search = function(val) {
var len = this.length;

for (var i=0; i < len; i++) {
if (this[i] == val) return i;
}

return -1;
}

// search 메소드와 같으나 대소문자 구별안함
Array.prototype.isearch = function(val) {
var len = this.length;

if ((typeof val).toLowerCase() == ‘string’) val = val.toLowerCase();
for (var i=0; i < len; i++) {
if (typeof this[i] != typeof val) continue;
if ((typeof val).toLowerCase() == ‘string’ && val == this[i].toLowerCase()) return i;
else if (val == this[i]) return i;
}
return -1;
}

// 키 배열을 받아서 문자열 인덱스가 있는 객체를 반환한다.
// 만일 배열의 크기가 서로 맞지 않으면 빈 array가 반환된다.
// 리턴값은 object
Array.prototype.combine = function(keyArr) {
if (this.length != keyArr.length) return [];

var ret = {};
for (var i=0; i < this.length; i++) ret[keyArr[i]] = this[i]; return ret;
}

// 범위의 값을 포함하고 있는 배열 반환
Array.prototype.range = function(Low, High, Step) {
var ret = [];
var t1 = (typeof Low).toLowerCase();
var t2 = (typeof High).toLowerCase();

if (Step == undefined) Step = 1;
if (!((t1 == ‘number’ || t1 == ‘string’) && t1 == t2)) return ret;
if (t1 == ‘string’) { Low = Low.charCodeAt(0); High = High.charCodeAt(0); }

for (var i=Low; i <= High; i+=Step) ret[ret.length] = (t1=='string')?String.fromCharCode(i):i; return ret;
}

// 배열의 각 요소에 같은 함수 적용
// 만약, funcName 이라는 함수가 있다고 하면, Array.walk(funcName)과 같이 사용한다.
// 함수의 첫번째 전달자에 값이, 두번째 전달자에 인덱스가 전달된다.
Array.prototype.walk = function(Func) {
var len = this.length;
for (var i=0; i this[i] = Func(this[i], i);
}
}

// 배열 정렬 순서를 거꾸로 한다.
// 사용자 함수를 지정하면 지정한 함수로 정렬한다.
Array.prototype.rsort = function(sortFunc) {
if (sortFunc == undefined) this.sort();
else this.sort(sortFunc);
return this.reverse();
}

// 배열내에 존재하는 숫자를 모두 더한다.
Array.prototype.sum = function() {
var ret = 0;
for (var i=0; i if((typeof this[i]).toLowerCase() == ‘number’) ret += this[i];
}

return ret;
}

// 현재 배열요소를 반환한다.
Array.prototype.current = function() {
if (this._index > this.length) this._index = this.length;
return this[this._index];
}

// 현재 배열요소의 이전요소로 포인터를 이동하고 이전요소를 반환한다.
Array.prototype.prev = function() {
if (–this._index < 0) this._index++;
return this[this._index];
}

// 현재 배열요소의 다음요소로 포인터를 이동하고 다음요소를 반환한다.
Array.prototype.next = function() {
if (++this._index >= this.length) this._index–;
return this[this._index];
}

// 배열의 처음 요소로 포인터를 이동하고 요소를 반환한다.
Array.prototype.first = function() {
this._index = 0;
return this[0];
}

// 배열의 마지막 요소로 포인터를 이동하고 요소를 반환한다.
Array.prototype.end = function() {
this._index = this.length – 1;
return this[this._index];
}

// 현재 키를 반환한다.
Array.prototype.key = function() {
if (this._index < 0) this._index = 0;
else if (this.length > 0 && this._index >= this.length) this._index = this.length – 1;
return this._index;
}

Array.prototype._index = 0;

2차배열중에서 몇몇 필드값만으로 정렬하기 (DB아님)

chiro

###########################################
# 2차원 배열을 중 몇몇 필드만 sort하는 방법 #
###########################################

phpschool에서 검색을 해서 2차원 배열에서 몇몇 필드값을 이용해서 정렬하는 방법을
찾았지만 없어서 php메뉴얼을 뒤졌습니다. 결국 array_multisort 를 찾게 되었습니다.
아래는 그 결과물을 정리해서 올립니다. 그냥 참조하시고 많은 리플 바랍니다.

##############################################################################
$arr[0] = array(0=>’1990-10-10′,1=>1,2=>’홍길동’,3=>20000,4=>’제목1′);
$arr[1] = array(0=>’2001-10-10′,1=>4,2=>’김길동’,3=>15000,4=>’제목2′);
$arr[2] = array(0=>’2003-10-10′,1=>3,2=>’박길동’,3=>30000,4=>’제목3′);
$arr[3] = array(0=>’2000-10-10′,1=>2,2=>’한길동’,3=>18000,4=>’제목4′);
$arr[4] = array(0=>’1998-10-10′,1=>5,2=>’chiro’,3=>10000,4=>’제목5′);

foreach ($arr as $key => $row) {
$aaa[$key] = $row[0]; // 날짜임
$bbb[$key] = $row[1]; // 순위
$ccc[$key] = $row[2]; // 이름
$ddd[$key] = $row[3]; // 가격
$eee[$key] = $row[4]; // 제목임
}

array_multisort($aaa, SORT_ASC, $eee, SORT_ASC, $arr); // 날짜과 제목를 정렬하는 경우
// array_multisort($bbb, SORT_ASC, $aaa, SORT_ASC, $arr); // 순위와 날짜를 정렬하는 경우
// array_multisort($ccc, SORT_ASC, $aaa, SORT_ASC, $arr); // 이름과 순위를 정렬하는 경우
// array_multisort($bbb, SORT_ASC, $aaa, SORT_ASC, $ccc, SORT_ASC, $arr); // 순위와 날짜와 이름을 정렬하는 경우
reset($arr);

// print_r($arr);

while (list($key, $val) = each($arr)) {
echo “$val[0] – $val[1] – $val[2] – $val[3] – $val[4]”;
echo “
“;
}
?>

배열을 지정된 순서부터 모두출력

/**
배열원소를 지정된 순서부터 나열한다.
**/
function array_sort ($array, $total_cnt, $start_cnt) {
if($start_cnt!=0){
$a_cnt = 0;
for($i=$start_cnt; $i<$total_cnt; $i++){
$array_test[$a_cnt] = $array[$i];
$a_cnt++;
}

for($i=0; $i<$start_cnt; $i++){
$array_test[$a_cnt] = $array[$i];
$a_cnt++;
}
return $array_test;
}else{
return $array;
}
}

$array = array (“four”, “three”, “twenty”, “ten”, “nine”, “five”, “eight”);

$array_test = array_sort($array, sizeof($array), 3);

while (list ($key, $value) = each ($array_test)) {
echo “$key: $value

“;
}

9월 코드를 짜다보면 가능한 루프를 안쓰는게 좋더군요..
시간이나 리소스나.. 되도록 php에서 제공하는 함수를 사용하는 편입니다.
물론.. php 제공함수도 내부적으로 루프를 돌리겠죠..

그래도;; 위 코드를 루프없이 한번 바꿔봤습니다..

$array = array (“four”, “three”, “twenty”, “ten”, “nine”, “five”, “eight”);

function array_remerge($arArray, $nNum)
{
if(!is_array($arArray)) return false;
if($nNum <1 || $nNum > count($arArray)) return $arArray;

return array_merge(array_slice($arArray, $nNum),array_slice($arArray, 0, $nNum));
}

$arReMerge = array_remerge($array, 3);
print_r($arReMerge);
?> 09/20 12:52:47

9월 위 코드에서
if($nNum <1 || $nNum > count($arArray)) return $arArray;
가 빠지니.. 좀더 재미있는 효과(?)가 나오네요..
$arReMerge = array_remerge($array, -3);
같은게 가능해지네요…