-
- /**
- * FILE_NAME : arr.php FILE_PATH : test/
- * 다차원 배열의 키 이름에 따라 상위 키와 상위 키 값을 빠르게 쿼리
- *
- * @copyright Copyright (c ) 2006-2010
- * @author Levi
- * @package test.arr
- * @subpackage
- * @version 2011-04-29
- * @link bbs.it-home.org
- */
- header("콘텐츠 유형: text/html; charset=utf-8" );
- $arr = 배열
- (
- 'china' => 배열
- (
- 'name' => '중국',
- 'cite' => 배열
- (
- 'beijing' => 배열
- (
- 'name' => 'Beijing',
- 'site' => array('chaoyang' => 'Chaoyang District', 'xuanwu' => '쉬안우 지구')
- ),
- 'shanghai' => 배열
- (
- 'name' => 'Shanghai',
- ' 사이트 ' => array('jingan' => '징안구', '황푸' => '황푸구')
- )
- )
- )
- );
- function printA($data)
- {
- echo '
';</li>
<li>print_r($data);</li>
<li>echo ' ';
- }
- function indexKey($data, $parent = NULL)
- {
- $arr = array();
- foreach($data를 $key => $value로)
- {
- $arr[ $ key] = $parent;
- if (is_array($value))
- {
- $arr = indexKey($value, $key);
- }
- }
- return ( Array )$arr;
- }
- printA(indexKey($arr));
- ?>
코드 복사
데이터 인쇄 다음과 같이
정렬
(
[중국] =>
[이름] => 중국
[인용] => 중국
[베이징] => 인용
[사이트] => 베이징
[조양] => 사이트
[쉬안우] => 사이트
[상하이] => 인용
[징안] => 사이트
[황푸] => 사이트
)
하지만 위의 내용을 작성하는 데에는 문제가 있습니다. 즉, 동일한 이름의 키가 있으면 손실되므로 이러한 클래스를 작성했습니다.
배열을 객체에 전달하기만 하면 객체는 두 개의 인터페이스를 제공합니다.
printArr은 인덱스 배열을 인쇄합니다.
검색은 키 이름의 상위 배열 키 이름을 쿼리합니다.
IndexKey는 쿼리 인덱스 쿼리 클래스를 생성합니다.
-
- /**
- * FILE_NAME : arr.php FILE_PATH : test/
- * 다차원 배열의 키 이름에 따라 상위 키와 상위 키 값을 빠르게 쿼리
- *
- * @copyright Copyright (c ) 2006-2010
- * @author Levi
- * @package test.arr
- * @subpackage
- * @version 2011-04-29
- * @link bbs.it-home.org
- */
- header("콘텐츠 유형: text/html; charset=utf -8");
- $arr = 배열
- (
- 'china' => 배열
- (
- 'name' => '중국',
- 'cite' = > array
- (
- 'beijing' => array
- (
- 'name' => 'Beijing',
- 'site' => array('chaoyang' => ; ' 조양구', '쉬안우' => '쉬안우구')
- ),
- '상하이' => 배열
- (
- '이름' => '상하이',
- 'site' => array('jingan' => '징안구', '황푸' => '황푸구')
- )
- )
- )
- );
- function printA($data)
- {
- echo '
';</li>
<li>print_r($data);</li>
<li>echo ' ';
- }
- function printP(IndexKey $obj, $key)
- {
- $parent = $obj->search($key);
- if ($parent)
- {
- echo '" '.$key.'" 상위 키는 ';
- if (!is_array($parent))
- {
- echo $parent."
n";
- }
- else printA($parent);
- }
- else echo '부모 없음 또는 "'.$key.'" 검색 없음!'."
n";
- }
- class IndexKey
- {
- private $_arr = array();
- public function __construct($data)
- {
- $this->_createIndex ($data);
- }
- 공용 함수 printArr()
- {
- return (Array)$this->_arr;
- }
- 공용 함수 검색($key)
- {
- return isset($this->_arr[$key]) ? $this->_arr[$key] : NULL;
- }
- 비공개 함수 _createIndex($data, $parent = NULL)
- {
- foreach($data as $key => $value)
- {
- $this->_checkIndex($key, $parent);
- if(is_array ($value))
- {
- $this->_createIndex($value, $key);
- }
- }
- }
- 비공개 함수 _checkIndex($key, $parent) )
- {
- $index = isset($this->_arr[$key]) ? $this->_arr[$key] : NULL;
- if ($index)
- {
- if (is_array($index))
- {
- array_push($this->_arr[$key], $parent);
- }
- else $this->_arr[ $key] = 배열($index, $parent);
- }
- else $this->_arr[$key] = $parent;
- }
- }
- $index = ( Object)new IndexKey($arr);
- printA($index->printArr());
- printP($index, 'beijing');
- printP($index, 'name');
- printP($index, 'china');
- ?>
코드 복사
결국 데이터 출력이 하나밖에 남지 않아서 이 클래스를 수정했습니다.
세 가지 외부 메소드 제공
printArr은 인덱스 배열을 인쇄합니다.
검색은 키 이름의 상위 배열 키 이름을 쿼리합니다.
parentValue는 상위 키 값을 쿼리합니다.
-
- /**
- * FILE_NAME : arr.php FILE_PATH : test/
- * 다차원 배열의 키 이름에 따라 상위 키와 상위 키 값을 빠르게 쿼리
- *
- * @copyright Copyright (c ) 2006-2010
- * @author Levi
- * @package test.arr
- * @subpackage
- * @version 2011-04-29
- * @link bbs.it-home.org
- */
- header("콘텐츠 유형: text/html; charset=utf -8");
- $arr = 배열
- (
- 'china' => 배열
- (
- 'name' => '중국',
- 'cite' = > array
- (
- 'beijing' => array
- (
- 'name' => 'Beijing',
- 'site' => array('chaoyang' => ; ' 조양구', '쉬안우' => '쉬안우구')
- ),
- '상하이' => 배열
- (
- '이름' => '상하이',
- 'site' => array('jingan' => '징안구', '황푸' => '황푸구')
- )
- )
- )
- );
- function printA($data)
- {
- echo '
';</li>
<li>print_r($data);</li>
<li>echo ' ';
- }
- function printP2(IndexArr $obj, $key)
- {
- $parent = $obj->search($key);
- if (!is_array($parent))
- {
- if ($parent)
- {
- echo '"'.$key.'" 상위 키는 '.$parent."
n";
- }
- else echo '부모 없음 또는 "'.$key.'" 검색 없음!'."
n";;
- echo '"'.$key.'" 부모 "'.$parent. '" 값은 다음과 같습니다. ';
- printA($obj->parentValue($key));
- }
- else printA($parent);
- }
- class IndexArr
- {
- 비공개 $_arr = array();
- 공용 함수 __construct($data)
- {
- $this->_createIndex($data);
- }
- 공용 함수 printArr ()
- {
- return (Array)$this->_arr;
- }
- 공개 함수 검색($key)
- {
- return isset($this->_arr [$key]) ? $this->_arr[$key]['parent'] : NULL;
- }
- 공용 함수 parentValue($key)
- {
- return isset($this ->_arr[$key]) ? $this->_arr[$key]['data'] : NULL;
- }
- 비공개 함수 _createIndex($data, $parent = NULL)
- {
- foreach ($data as $key => $value)
- {
- $this->_checkIndex($key, $parent, $data);
- if (is_array($value) ))
- {
- $this->_createIndex($value, $key);
- }
- }
- }
- 비공개 함수 _checkIndex($key, $parent, $data )
- {
- $data = $parent & isset($data[$parent]) ? $data[$parent] : $data;
- !isset($this->_arr[$key] ) & $this->_arr[$key] = array('data' => $data, 'parent' => '');
- $index = &$this->_arr[$key ]['parent'];
- if (!empty($index))
- {
- if (is_array($index))
- {
- array_push($index, $parent);
- }
- else $index = array($index, $parent);
- }
- else $index = $parent;
- }
- }
- $index2 = (객체 )new IndexArr($arr);
- printA($index2->printArr());
- printP2($index2, 'beijing');
- printP2($index2, 'name');
- printP2($index2, 'china');
- ?>
코드 복사
|