이 기사의 예에서는 PHP로 구현된 트리 구조 데이터 액세스 클래스를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요.
구체적인 구현 코드는 다음과 같습니다.
* Tanphp 프레임워크
*
*
* @category Tanphp
* @package 데이터_구조
* @version $Id: Tree.php 25024 2012-11-26 22:22:22 tanbo $
*/
/**
* 트리 구조 데이터 접근 클래스
*
* 트리 구조 데이터에 빠르게 접근하기 위해 사용됩니다
*
* @param array $arr 매개변수는
예시와 같이 인덱스 필드(id)와 트리 구조를 나타내는 필드(path)를 포함하는 표준 2차원 배열이어야 합니다. *
* @예제 * $arr = 배열(
* array( 'id' => 1, 'name' => 'php', 'path' => '1' ),
* array( 'id' => 3, 'name' => 'php1', 'path' => '1-3' ),
* array( 'id' => 2, 'name' => 'mysql', 'path' => '2' ),
* array( 'id' => 6, 'name' => 'mysql1', 'path' => '2-6' ),
* array( 'id' => 7, 'name' => 'mysql2', 'path' => '2-7' ),
* array( 'id' => 5, 'name' => 'php11', 'path' => '1-3-5' ),
* array( 'id' => 4, 'name' => 'php2', 'path' => '1-4' ),
* ); * $cate = 새 트리($arr)
*
* $data = $cate->getChild(2)
*
* print_r($data->toArray())
* 코드> *
*/
클래스 트리
{
공개 $_info; //노드 정보
공개 $_child = array(); //하위 노드
private $_parent; //부모 노드
private $_data; //현재 작업에 대한 임시 데이터
Private static $_indexs = array(); //모든 노드의 인덱스
Private static $_index_key = 'id' //인덱스 키
Private static $_tree_key = 'path'; //트리 구조 표현식 키
Private static $_tree_delimiter = '-' //속성 구조 표현식 구분 기호
/**
* 생성자
* *
* @param 배열 $arr
* @param boole $force_sort true인 경우 $arr가 강제로 정렬됩니다.
* @return 무효
*/
공용 함수 __construct(array $arr = array(), $force_sort=true)
{
If ($force_sort === true) {
$arr=$this->_array_sort($arr, self::$_tree_key)
}
If (!emptyempty($arr)) {
$this->_init($arr)
}
}
/**
* 트리 데이터의 초기 저장
* *
* @param 배열 $arr
* @return 무효
*/
개인 함수 _init(array $arr)
{
foreach($arr를 $item으로) {
> > > $count_paths = 개수($paths)
$parent_id = isset($paths[$count_paths-2]) ? $paths[$count_paths-2] : NULL
~ if ( $count_paths>1 ~ > > && 인스턴스 트리 ) {
> } elseif ($count_paths == 1) {
$this->addChild($item)
} else {
새로운 예외 발생("path data error".var_export($item, true))
}
}
//print_r(self::$_indexs)
}
/**
* 하위 노드 추가
* *
* @param 배열 $item
* @return 무효
*/
공개 함수 addChild(배열 $item, $parent = NULL)
{
$child = 새 트리()
$child->_info = $항목
$child->_parent = $parent == NULL $this : $parent
$child->_parent->_child[] = $child
$this->_addIndex($item, $child->_getSelf())
}
/**
* 색인에 노드 추가
* *
* @param 배열 $item
* @param mix $value
* @return 무효
*/
전용 함수 _addIndex(array $item, $value)
{
If (array_key_exists(self::$_index_key, $item) && is_int($item[self::$_index_key])) {
self::$_indexs[$item[self::$_index_key]] = $value
} else {
새로운 예외 발생("ID 필드가 존재하지 않거나 문자열이 아닙니다."); }
}
/**
* 자신에 대한 참조를 얻으세요
* *
* @return 트리 객체 인용문
*/
비공개 함수 _getSelf()
{
$this 반환
}
/**
* * 지정된 ID를 가진 노드의 하위 노드를 가져옵니다.
* *
* @param int $id
* @return 트리 객체
*/
공개 함수 getChild($id)
{
$data = self::$_indexs[$id]->_child;
$this->_data = $data;
$this를 반환합니다.
}
/**
* * 지정된 ID를 가진 노드의 상위 노드를 가져옵니다.
* *
* @param int $id
* @return 트리 객체
*/
공개 함수 getParent($id)
{
$data = self::$_indexs[$id]->_parent;
$this->_data = $data;
$this를 반환합니다.
}
/**
* 지정된 ID를 가진 노드의 형제 노드를 가져옵니다
* *
* @param int $id
* @return 트리 객체
*/
공개 함수 getBrother($id)
{
$data = self::$_indexs[$id]->_parent->_child;
$this->_data = $data;
$this를 반환합니다.
}
/**
* Tree 객체를 배열로 변환
* *
* @param 개체 $object
* @return 배열
*/
공개 함수 toArray($obj = NULL)
{
$obj = ($obj === NULL) ? $this->_data : $obj;
$arr = 배열();
$_arr = is_object($obj) ? $this->_getBaseInfo($obj) : $obj;
if (is_array($_arr)) {
foreach($_arr as $key => $val){
$val = (is_array($val) || is_object($val)) ? $this->toArray($val) : $val;
$arr[$key] = $val;
}
} 다른 {
새로운 예외 발생("_arr不是数组");
}
$arr를 반환합니다.
}
/**
* * 무한 루프를 방지하려면 _parent와 같은 필드를 필터링하세요.
* *
* @param 객체 $obj
* @return 무효
*/
개인 함수 _getBaseInfo($obj)
{
$vars = get_object_vars($obj);
$baseInfo['_info'] = $vars['_info'];
$baseInfo['_child'] = $vars['_child'];
$baseInfo를 반환합니다.
}
/**
* * 2차원 배열 정렬
* *
* 지정된 키 이름에 따라 2차원 배열을 오름차순 또는 내림차순으로 배열합니다
* *
* @param array $arr 2차원 배열
* @param string $keys
* @param string $type은 asc 또는 desc여야 합니다
* @throws는 매개변수가 잘못된 경우 예외를 발생시킵니다.
* @return 정렬된 배열을 반환합니다
*/
개인 함수 _array_sort(array $arr, $keys, $type = 'asc') {
If (!is_string($keys)) {
새로운 예외 발생("잘못된 매개변수 키: 매개변수 키 유형은 문자열이어야 합니다."); }
$keysvalue = $new_array = 배열()
foreach ($arr as $k=>$v) {
If (!is_array($v) || !isset($v[$keys])) {
throw new Exception("매개변수 arr이 2차원 배열이 아니거나 '{$keys}' 키가 arr 하위 요소에 존재하지 않습니다."); }
$keysvalue[$k] = $v[$keys]
}
스위치($type) {
케이스 'asc':
분류($keysvalue)
휴식
케이스 '설명':
arsort($keysvalue)
휴식
기본값:
throw new Exception("잘못된 매개변수 유형: 매개변수 유형의 값은 'asc' 또는 'desc'여야 합니다.")
}
재설정($keysvalue)
foreach ($keysvalue as $k=>$v) {
$new_array[$k] = $arr[$k]
}
$new_array 반환
}
}
?>

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
