-
- /**
- * 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("Content-Type: text/html; charset=utf-8");
- $arr = array
- (
- '中国' = > 配列
- (
- '名前' => '中国',
- '引用' => 配列
- (
- '北京' => 配列
- (
- '名前' => '北京',
- 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
- ),
- '上海' => '上海' ',
- 'サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
- )
- )
- )
- );
- function printA($data )
- {
- echo '
';</li>
<li>print_r($data);</li>
<li>echo ' ';
- }
- functionindexKey($data, $parent = NULL)
- {
- $arr = array () ;
- foreach ($data as $key => $value)
- {
- $arr[$key] = $parent;
- if (is_array($value))
- {
- $arr +=indexKey($value) , $ key);
- }
- }
- return (Array)$arr;
- }
- printA(indexKey($arr));
- ?>
-
-
コードをコピー
次のようにデータを出力します
配列
(
[中国] =>
[名前] => 中国
[引用] => 中国
[北京] => 引用
[サイト] => 北京
【朝陽】 ⇒ サイト
[玄武] => サイト
[上海] => 引用
[ジンガン] => サイト
[黄埔] => サイト
)
ただし、上記の書き方には問題があり、同じ名前のキーが存在すると失われてしまうので、このようなクラスを書きました。
配列をオブジェクトに渡すだけで、オブジェクトは 2 つのインターフェイスを提供します
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("Content-Type: text/html; charset=utf-8");
- $arr = array
- (
- '中国' => 配列
- (
- '名前' => '中国',
- '引用' => 配列
- (
- '北京' => 配列
- (
- '名前' => '北京',
- 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
- ),
- '上海' => '上海',
- 'サイト' => 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.'" の検索がありません!'."
br />n";
- }
- class IndexKey
- {
- private $_arr = array();
- public function __construct($data)
- {
- $this->_createIndex($data);
- }
- public function printArr()
- {
- return (Array)$this->_arr;
- }
- public function search($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] = array($index, $parent);
- }
- else $ this->_arr[$key] = $parent;
- }
- }
- $index = (Object)new IndexKey($arr);
- printA($index->printArr());
- printP($ Index, '北京');
- printP($index, 'name');
- printP($index, '中国');
- ?>
-
-
- コードをコピー
-
最終的に、データ出力が 1 つだけ残ったので、このクラスを変更しました
3 つの外部メソッドを提供します
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("Content-Type: text/html; charset=utf-8");
- $arr = array
- (
- '中国' => 配列
- (
- '名前' => '中国',
- '引用' => 配列
- (
- '北京' => 配列
- (
- '名前' => '北京',
- 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
- ),
- '上海' => '上海',
- 'サイト' => 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. "< ;br />n";
- }
- else echo '親がいない、または ".$key.'" の検索がありません!'."
n";; - echo '"'。 $key .'" 親 "'.$parent.'" 値は: ';
- printA($obj->parentValue($key));
- }
- else printA($parent);
- }
- class IndexArr
- {
- private $_arr = array();
- public function __construct($data)
- {
- $this->_createIndex($data);
- }
- public function printArr()
- {
- return (Array)$this- > _arr;
- }
- パブリック関数 search($key)
- {
- return isset($this->_arr[$key]) $this->_arr[$key]['parent'] : NULL;
- }
- public functionparentValue($key)
- {
- return isset($this->_arr[$key]) $this->_arr[$key]['data'] : NULL;
- }
- private function _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 = $親 & isset($data[$parent]) ? $data[$parent] : $data;
- !isset($this->arr[$key]) & $this->arr[$key] = 配列(' 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 = (Object)new IndexArr($arr);
- printA($index2->printArr());
- printP2($index2, '北京');
- printP2($index2, '名前') ;
- printP2($index2, 'china');
- ?>
-
-
コードをコピー
|