등록된 개수에 한하여 출력할 배너 개수 만큼 중복 없이 랜덤 하게 뽑아 줍니다.
사실상 따지자면 규칙이 있는 배너 출력입니다.
등록된 개수에 한하여 출력할 배너 개수 만큼 중복 없이 랜덤 하게 뽑아 줍니다.
사실상 따지자면 규칙이 있는 배너 출력입니다.
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
}
}
// 배열 정렬 순서를 거꾸로 한다.
// 사용자 함수를 지정하면 지정한 함수로 정렬한다.
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
}
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;
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);
같은게 가능해지네요…
글쓴이:행복한고니
http://mygony.com
http://mygony.com/tt/index.php?pl=70&nc=1
슬라이딩 메뉴를 구현해주는 자바스크립트입니다.
소스와 대충의 사용법은 아래에 남기지만, 실제 작동하는 예제를 보고싶다거나 제 홈페이지가 궁금해서 못견딜 것 같은 분(…이 있을리가!)은 링크에 오셔서 봐도 됩니다.
… 이 정도 홈페이지 광고는 봐주시는 거죠?
서브메뉴를 DIV 로 둘러싸는데 서브메뉴의 크기를 자동으로 인식해서 슬라이딩 애니메이션을 구현합니다.
브라우저는 오페라, 모질라(동급의 불여우 포함), 오페라에서 다 작동합니다. 제가 리눅스 데스크탑은 아직 사용하지 않는 이유로 리눅스 계열의 브라우저에선 테스트해보지 않았습니다. 아래에 적힌 것 이외의 버전이나 OS, 브라우저 등에서 확인해보신 분은 알려주시면 내용을 업데이트 하도록 하겠습니다.
그냥 사용하셔도 되지만, 불편하지 않으시다면 제 이름하고 사이트 주소만이라도 주석에 달아놓으시면 고맙겠습니다.
——————–
소스코드
——————–
function slide(Id, interval, to)
{
var obj = document.getElementById(Id);
var H, step = 5;
if (obj == null) return;
if (to == undefined) { // user clicking
if (obj._slideStart == true) return;
if (obj._expand == true) {
to = 0;
obj.style.overflow = “hidden”;
} else {
slide.addId(Id);
for(var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id != Id && slide.objects[i]._expand == true) {
slide(slide.objects[i].id);
}
}
obj.style.height = “”;
obj.style.overflow = “”;
obj.style.display = “block”;
to = obj.offsetHeight;
obj.style.overflow = “hidden”;
obj.style.height = “1px”;
}
obj._slideStart = true;
}
step = ((to > 0) ? 1:-1) * step;
interval = ((interval==undefined)?1:interval);
obj.style.height = (H=((H=(isNaN(H=parseInt(obj.style.height))?0:H))+step<0)?0:H+step)+"px";
if (H <= 0) {
obj.style.display = “none”;
obj.style.overflow = “hidden”;
obj._expand = false;
obj._slideStart = false;
} else if (to > 0 && H >= to) {
obj.style.display = “block”;
obj.style.overflow = “visible”;
obj.style.height = H + “px”;
obj._expand = true;
obj._slideStart = false;
} else {
setTimeout(“slide(‘”+Id+”‘ , “+interval+”, “+to+”);”, interval);
}
}
slide.objects = new Array();
slide.addId = function(Id)
{
for (var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id == Id) return true;
}
slide.objects[slide.objects.length] = document.getElementById(Id);
}
——————–
사용예제 코드
——————–
——————–
테스트 해본 브라우저
——————–
Internet Explorer 6.0 SP1
Mozilla 1.7.2 (windows)
Opera 7.54 (windows)