/**
* FILE_NAME : arr.php FILE_PATH : test/
* 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします
*
* @copyright Copyright (c) 2006-2010 mail:levi@ cgfeel.com
* @author Levi
* @package test.arr
* @subpackage
* @version 2011-04-29
*/
header("Content-Type: text/html; charset =utf-8");
$arr = 配列
(
'中国' => 配列
(
'名前' => '中国',
'cite' => 配列
(
'北京' = > 配列
(
'名前' = > '北京',
'サイト' => array('朝陽' => '朝陽区', '玄武' => '玄武区')
),
'上海' => array
(
'name' => '上海',
'サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
)
)
)
) ;
function printA($data)
echo '
' <br>print_r($data)'; <br>関数indexKey($data, $parent = NULL) <br>{ <br>$arr = array(); <br>foreach ($data as $key => $value) <br>{ <br>$arr[$key] = $parent; if (is_array($value)) <br>{ <br>$ arr += IndexKey($value, $key) <br>} <br>return (Array)$arr; <br>printA(indexKey($arr)); > <br><br> <br>次のようにデータを出力します<br>配列 <br> ( <br>[中国] => <br>[名前] => 中国 <br>[引用] => 中国 </div>[北京] => 引用 <br>[サイト] => 北京 <br>[朝陽] => サイト <br>[玄武] => サイト <br>[上海] => サイト <br>[黄埔] => サイト <br>) <br> ただし、上記の書き方には問題があります。つまり、同じ名前のキーがあるとLostが発生するので、そのようなクラスを書きました<br>配列をオブジェクトに渡すだけでよく、オブジェクトはインデックス配列を出力するための2つのインターフェイスを提供します<br>printArr <br>search キー名の親配列キー名をクエリします。 <br>IndexKey クエリ インデックス クエリ クラスを作成します: <br><br><br><br> コードをコピーします <br><br> コードは次のとおりです: <br><br> <br><?php <div class="codetitle">/**<span style="CURSOR: pointer" onclick="doCopy('code99588')">* FILE_NAME : arr.php FILE_PATH : test/ <U>* 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします </U>* </span>* @copyright Copyright (c) 2006-2010 mail:levi@ cgfeel.com </div> * @author Levi <div class="codebody" id="code99588">* @package test.arr <BR>* @subpackage <BR>* @version 2011-04-29 <BR>*/ <BR>header("Content-Type: text/html; charset=utf-8"); <BR>$arr = array <BR>( <BR>'中国' => array <br>( <br>'name' => '中国', <br>'cite' => 配列 <br>( <br>'北京' => 配列 <br>( <br>'名前' => '北京 ', <br>'サイト' => 配列('朝陽' => '朝陽地区', '玄武' => '玄武区') <br>), <br>'上海' => array <br>( <br>'name' => '上海', <br>'site' => array('jingan' => '静安区', '黄浦区') <br>) <br>) <br>); <br>function printA ($data) <br>echo '<pre class="brush:php;toolbar:false">'; ($data); <br>echo '
';
}
function printP(IndexKey $obj, $key)
{
$parent = $obj->search($key); )
{
echo '"'.$key.'" 親キーは: ';
if (!is_array($parent))
{
echo $parent."
n"; else printA($parent);
}
else echo '親がいない OR '.$key.' の検索がありません!'."< br />
n"; IndexKey
{
private $_arr = array();
public 関数 __construct($data)
{
$this->_createIndex($data)
}
public 関数 printArr()
{
return (Array)$ this->_arr;
}
public function search($key)
return isset($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, '中国')>
最終的に、データ出力は 1 つだけ残ったので、このクラスを変更しました
3 つの外部メソッドを提供しました
printArr はインデックス配列を出力します
search はキー名の親配列のキー名をクエリします
parentValue は親キーの値をクエリします
コードをコピーします コードは次のとおりです:
/**
* FILE_NAME : arr.php FILE_PATH : test/
* 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします
*
* @copyright Copyright (c) 2006-2010 mail:levi@ cgfeel.com
* @author Levi
* @package test.arr
* @subpackage
* @version 2011-04-29
*/
header("Content-Type: text/html; charset=utf-8");
$arr = array
(
'中国' => 配列
(
'名前' => '中国',
'cite' => 配列
(
'北京' => 配列
(
'名前' => '北京',
' サイト' => array('朝陽' => '朝陽区', '玄武' => '玄武区')
),
'上海' => ' => ' 上海',
' サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
)
)
)
);
関数 printA($data)
{
$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);
クラス IndexArr
{
プライベート $_arr = array();
パブリック関数 __construct($data)
{
$this->_createIndex($data)
}
パブリック関数 printArr()
return (配列)$this-> _arr;
}
public function search($key)
return isset($this->_arr[$key]['parent) '] : NULL;
パブリック関数parentValue($key)
{
return isset($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']; empty($index))
{
if (is_array($index))
{
array_push($index, $parent)
}
else $index = array($index, $parent);インデックス = $parent;
}
$index2 = (オブジェクト)new IndexArr($arr);
printP2($index2, '北京'); $index2, 'name') ;
printP2($index2, 'china');
ソースファイルコード: php_arr
http://www.bkjia.com/PHPjc/323369.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/323369.html
技術記事
私が考えること: 多次元配列を 1 回走査し、すべてのキーにインデックスを付けて 1 次元配列を生成します。毎回、キー名を通じてこのキーの上位配列とデータを確認します。コードは次のとおりです。