JS array functions

// whole

function copy_array( a ) {
	
	// USE: var b = copy_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 21:00
	// DESC: see name
	// LANG: JS
	// TAGS: array, copy
	
	var i;
	var b = [];
	
	for ( i=0; i<a.length; i++ ) b[i] = a[i];
	
	return b;
	
} // function

function reverse_array( a ) {
	
	// USE: var b = reverse_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 21:05
	// DESC: see name
	// LANG: JS
	// TAGS: array, reverse
	
	var l = a.length;
	var i;
	var b = [];
	
	for ( i=0; i<l; i++ ) b[i] = a[l-1-i];
	
	return b;
	
} // function

function replace_array( a, b ) {
	
	// ALGO: low
	// DATE: 2025-09-26 21:10
	// DESC: see name
	// LANG: JS
	// TAGS: array
	
	/*
	
	a = [];
	
	a = copy_array( b );
	
	*/
	
	// TAGS: array, replace
	
} // function

function sort_array( a ) {
	
	// USE: var b = sort_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 21:05
	// DESC: see name
	// LANG: JS
	// TAGS: array, sort
	
	var b = a.sort();
	
	return b;
}

// elements

	// check
	
function check_element_of_array( a, v ) {
	
	// USE: var sw = check_element_of_array( a, v );
	
	// ALGO: low
	// DATE: 2025-09-26 21:20
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, check
	
	var sw = check_element_of_part_of_array( a, v, 0, a.length-1 );
	
	return sw;
	
} // function

function check_element_of_part_of_array( a, v, i, j ) {
	
	// var sw = check_element_of_part_of_array( a, v, i, j );
	
	// ALGO: low
	// DATE: 2025-09-26 21:25
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, check
	
	var k;
	var sw = false;
	
	for ( k=i; k<=j; k++ ) {
		
		if ( a[k] == v ) { // match
			
			sw = true;
			
			break;
			
		} // if
		
	} // for
	
	return sw;
	
} // function

	// count
	
function count_elements_of_array( a ) {
	
	// USE: var c = count_elements_of_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 21:30
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, count
	
	var c = a.length;
	
	return c;
	
} // function

function count_element_of_array_by_value( a, v ) {
	
	// USE: var c = count_element_of_array_by_value( a, v );
	
	// ALGO: low
	// DATE: 2025-09-26 21:35
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, count
	
	var i;
	var c = 0;
	
	for ( i=0; i<a.length; i++ ) {
		
		if ( a[i] == v ) c++;
		
	} // for
	
	return c;
	
} // function

function count_values_of_array( a ) {
	
	// USE: var r = count_values_of_array( a );
	
	// ALGO: medium
	// DATE: 2025-09-26 21:40
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, count
	
	var b = get_unique_elements_of_array( a );
	
	var e, c;
	var r = [];
	var s = 0;
	
	for ( i=0; i<b.length; i++ ) {
		
		e = b[i];
		
		c = count_element_of_array_by_value( a, e );
		
		r[s++] = e;
		r[s++] = c;
		
	} // for
	
	return r;
	
} // function

function count_values_of_sorted_array( a ) {
	
	// USE: var r = count_values_of_sorted_array( a );
	
	// ALGO: medium
	// DATE: 2025-09-26 21:45
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, count, sort
	
	var b = get_unique_elements_of_sorted_array( a );
	
	var e, c;
	var r = [];
	var s = 0;
	
	for ( i=0; i<b.length; i++ ) {
		
		e = b[i];
		
		c = count_element_of_array_by_value( a, e );
		
		r[s++] = e;
		r[s++] = c;
		
	} // for
	
	return r;
	
} // function

function sort_and_count_values_of_array( a ) {
	
	// USE: var b = sort_and_count_values_of_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 21:50
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, count, sort
	
	var b = a.sort();
	
	a = [];
	
	a = copy_array( b );
	
	b = [];
	
	b = count_values_of_sorted_array( a );
	
	return b;

} // function

	// delete
	
function delete_element_of_array( a, i ) {
	
	// USE: var b = delete_element_of_array( a, i );
	
	// ALGO: low
	// DATE: 2025-09-26 21:55
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, delete
	
	var j;
	var b = [];
	var c = 0;
	
	for ( j=0; j<a.length; j++ ) {
	
		if ( j != i ) b[c++] = a[j];
	
	} // for
	
	return b;
	
} // function

function delete_elements_of_array_by_value( a, v ) {
	
	// USE: var b = delete_elements_of_array_by_value( a, v );
	
	// ALGO: low
	// DATE: 2025-09-26 22:00
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, delete

	var i;
	var b = [];
	var c = 0;
	
	for ( i=0; i<a.length; i++ ) {
	
		e = a[i];
		
		if ( e != v ) b[c++] = e;
	
	} // for
	
	return b;

} // function

function delete_empty_elements_of_array( a ) {
	
	// USE: var b = delete_empty_elements_of_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 22:05
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, delete
	
	var b = delete_elements_of_array_by_value( a, "" );
	
	return b;
	
}

function delete_repetitive_elements( a ) {
	
	// USE: var b = delete_repetitive_elements( a );
	
	// ALGO: low
	// DATE: 2025-09-26 22:10
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, delete
	
	var i, e;
	var b = [];
	var c = 0;
	
	for ( i=0; i<a.length; i++ ) { 
	
		e = a[i];
		
		if ( i < 1 ) {
			
			b[c++] = e;
			
		} else {
	
			if ( e != a[i-1] ) b[c++] = e;
			
		} // if/else
		
	} // for
	
	return b;
	
} // function

	// unique elements

function get_unique_elements_of_array( a ) {
	
	// USE: var b = get_unique_elements_of_array( a );
	
	// ALGO: medium
	// DATE: 2025-09-26 22:15
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, unique
	
	var i, e, sw;
	var b = [];
	var c = 0;
	
	for ( i=0; i<a.length; i++ ) { // loop through whole array
	
		e = a[i];
	
		if ( i < 1 ) {
			
			b[c++] = e;
			
		} else {
			
			sw = check_element_of_part_of_array( a, e, 0, i-1 ); // check array part above element
			
			if ( sw == false ) b[c++] = e;
			
		} // if/else
		
	} // for
	
	return b;
	
} // function

function get_unique_elements_of_sorted_array( a ) {
	
	// USE: var b = get_unique_elements_of_sorted_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 22:20
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, unique, sort
	
	var b = delete_repetitive_elements( a );
	
	return b;
	
} // function

function sort_and_get_unique_elements_of_array( a ) {
	
	// USE: var b = sort_and_get_unique_elements_of_array( a );
	
	// ALGO: low
	// DATE: 2025-09-26 22:25
	// DESC: see name
	// LANG: JS
	// TAGS: array, element, unique, sort
	
	var b = a.sort();
	
	a = [];
	
	a = copy_array( b );
	
	b = [];
	
	b = get_unique_elements_of_sorted_array( a );
	
	return b;

} // function

PHP: url, path, files

// url and path

function get_url_of_current_dir() {
	
	// $url = get_url_of_current_dir();
	
	/* META TAGS:
	
	ALGO: medium
	DATE: 2025-07-11 20:00
	DESC: get URL of current dir
	LANG: PHP
	PROC: no
	TAGS: url, directory, current
	
	*/
	
    if( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] === 'on' ) $url = "https://"; 
    else $url = "http://";

    if( dirname( $_SERVER['PHP_SELF'] ) == "/" || dirname( $_SERVER['PHP_SELF'] ) == "\\" ) return $url . $_SERVER['HTTP_HOST'];
	else return $url . $_SERVER['HTTP_HOST'] . dirname( $_SERVER['PHP_SELF'] );

} // function

function get_path_of_current_dir() {
	
	// $path = get_path_of_current_dir();
	
	/* META TAGS:
	
	ALGO: medium
	DATE: 2025-07-11 20:05
	DESC: get path of current dir
	LANG: PHP
	PROC: no
	TAGS: path, directory, current
	
	*/
	
	return dirname( __FILE__ );
	
} // function

// file system

function get_files_of_dir( $dir, $recursion ) {
	
	// $files = get_files_of_dir( $dir, $recursion );
	
	/* META TAGS:
	
	ALGO: medium
	DATE: 2025-07-11 20:10
	DESC: get files of directory (with or without recursion)
	LANG: PHP
	PROC: no
	TAGS: file, directory
	
	*/
	
	$files = (
	
		new class {
			
			function get_files( $path, $ext='*', $recursion ) {
				
				$dh = opendir( $path );
				
				$files = [];
				
				while ( $file = readdir( $dh ) ) {
				
					if ( $file == '.' || $file == '..' ) continue;
					
					$f_path = str_replace( '//', '/', $path . '/' . $file );
					
					if ( is_dir( $f_path ) ) {
						
						if ( $recursion === true ) {
							
							$sub_files = $this->get_files( $f_path, $ext, $recursion );
						
							$files = array_merge( $files, $sub_files );
							
						} else {
							
							$files[] = $f_path;
							
						} // if/else
						
					} else if ( $ext == '*' || ( $f_ext = pathinfo( $f_path, PATHINFO_EXTENSION ) ) == $ext ) {
						
						$files[] = $f_path;
						
					} // if/else
					
				} // while 
				
				return $files;
				
			} // function
			
		} // class
		
	)->get_files( $dir, "*", $recursion );
	
	sort( $files );
	
	return $files;
	
} // function

function get_files_of_current_dir( $recursion ) {
	
	// $files = get_files_of_current_dir( $recursion );
	
	/* META TAGS:
	
	ALGO: medium
	DATE: 2025-07-11 20:15
	DESC: get files of current dir (with or without recursion)
	LANG: PHP
	PROC: no
	TAGS: file, directory, current
	
	*/
	
	$dir = get_path_of_current_dir();
	
	$files = get_files_of_dir( $dir, $recursion );
	
	return $files;
	
} // function