ホームページ > バックエンド開発 > PHPチュートリアル > キー名に基づいて PHP 多次元配列の親キーと親キー値をすばやくクエリします

キー名に基づいて PHP 多次元配列の親キーと親キー値をすばやくクエリします

WBOY
リリース: 2016-07-25 09:04:27
オリジナル
1465 人が閲覧しました
  1. /**
  2. * FILE_NAME : arr.php FILE_PATH : test/
  3. * 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします
  4. *
  5. * @copyright Copyright (c) 2006-2010
  6. * @author Levi
  7. * @ package test.arr
  8. * @subpackage
  9. * @version 2011-04-29
  10. * @link bbs.it-home.org
  11. */
  12. header("Content-Type: text/html; charset=utf-8");
  13. $arr = array
  14. (
  15. '中国' = > 配列
  16. (
  17. '名前' => '中国',
  18. '引用' => 配列
  19. (
  20. '北京' => 配列
  21. (
  22. '名前' => '北京',
  23. 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
  24. ),
  25. '上海' => '上海' ',
  26. 'サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
  27. )
  28. )
  29. )
  30. );
  31. function printA($data )
  32. {
  33. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  34. }
  35. functionindexKey($data, $parent = NULL)
  36. {
  37. $arr = array () ;
  38. foreach ($data as $key => $value)
  39. {
  40. $arr[$key] = $parent;
  41. if (is_array($value))
  42. {
  43. $arr +=indexKey($value) , $ key);
  44. }
  45. }
  46. return (Array)$arr;
  47. }
  48. printA(indexKey($arr));
  49. ?>
コードをコピー
次のようにデータを出力します 配列 ( [中国] => [名前] => 中国 [引用] => 中国 [北京] => 引用 [サイト] => 北京 【朝陽】 ⇒ サイト [玄武] => サイト [上海] => 引用 [ジンガン] => サイト [黄埔] => サイト ) ただし、上記の書き方には問題があり、同じ名前のキーが存在すると失われてしまうので、このようなクラスを書きました。 配列をオブジェクトに渡すだけで、オブジェクトは 2 つのインターフェイスを提供します printArr はインデックス配列を出力します 検索は、キー名の親配列キー名をクエリします。 IndexKey はクエリ インデックス クエリ クラスを作成します。

    /**
  1. * FILE_NAME : arr.php FILE_PATH : test/
  2. * 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします
  3. *
  4. * @copyright Copyright (c) 2006-2010
  5. * @author Levi
  6. * @ package test.arr
  7. * @subpackage
  8. * @version 2011-04-29
  9. * @link bbs.it-home.org
  10. */
  11. header("Content-Type: text/html; charset=utf-8");
  12. $arr = array
  13. (
  14. '中国' => 配列
  15. (
  16. '名前' => '中国',
  17. '引用' => 配列
  18. (
  19. '北京' => 配列
  20. (
  21. '名前' => '北京',
  22. 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
  23. ),
  24. '上海' => '上海',
  25. 'サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
  26. )
  27. )
  28. )
  29. );
  30. function printA($ data)
  31. {
  32. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  33. }
  34. function printP(IndexKey $obj, $key)
  35. {
  36. $parent = $ obj- >search($key);
  37. if ($parent)
  38. {
  39. echo '"'.$key.'" 親キーは: ';
  40. if (!is_array($parent))
  41. {
  42. echo $ parent. "
    n";
  43. }
  44. else printA($parent);
  45. }
  46. else echo '親がいない、または "'.$key.'" の検索がありません!'."
    br />n";
  47. }
  48. class IndexKey
  49. {
  50. private $_arr = array();
  51. public function __construct($data)
  52. {
  53. $this->_createIndex($data);
  54. }
  55. public function printArr()
  56. {
  57. return (Array)$this->_arr;
  58. }
  59. public function search($key)
  60. {
  61. return isset($this->_arr[$key]) $ this- >_arr[$key] : NULL;
  62. }
  63. プライベート関数 _createIndex($data, $parent = NULL)
  64. {
  65. foreach ($data as $key => $value)
  66. {
  67. $this-> ;_checkIndex ($key, $parent);
  68. if (is_array($value))
  69. {
  70. $this->_createIndex($value, $key);
  71. }
  72. }
  73. }
  74. プライベート関数 _checkIndex($key, $parent )
  75. {
  76. $index = isset($this->arr[$key]) ? $this->arr[$key] : NULL;
  77. if ($index)
  78. {
  79. if (is_array($ Index) )
  80. {
  81. array_push($this->_arr[$key], $parent);
  82. }
  83. else $this->_arr[$key] = array($index, $parent);
  84. }
  85. else $ this->_arr[$key] = $parent;
  86. }
  87. }
  88. $index = (Object)new IndexKey($arr);
  89. printA($index->​​printArr());
  90. printP($ Index, '北京');
  91. printP($index, 'name');
  92. printP($index, '中国');
  93. ?>
  94. コードをコピー

最終的に、データ出力が 1 つだけ残ったので、このクラスを変更しました 3 つの外部メソッドを提供します printArr はインデックス配列を出力します 検索は、キー名の親配列キー名をクエリします。 parentValue は親キー値をクエリします。

  1. /**
  2. * FILE_NAME : arr.php FILE_PATH : test/
  3. * 多次元配列内のキー名に従って、親キーと親キーの値をすばやくクエリします
  4. *
  5. * @copyright Copyright (c) 2006-2010
  6. * @author Levi
  7. * @ package test.arr
  8. * @subpackage
  9. * @version 2011-04-29
  10. * @link bbs.it-home.org
  11. */
  12. header("Content-Type: text/html; charset=utf-8");
  13. $arr = array
  14. (
  15. '中国' => 配列
  16. (
  17. '名前' => '中国',
  18. '引用' => 配列
  19. (
  20. '北京' => 配列
  21. (
  22. '名前' => '北京',
  23. 'サイト' => 配列('朝陽' => '朝陽区', '玄武' => '玄武区')
  24. ),
  25. '上海' => '上海',
  26. 'サイト' => array('jingan' => '静安区', '黄浦' => '黄浦区')
  27. )
  28. )
  29. )
  30. );
  31. function printA($ data)
  32. {
  33. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  34. }
  35. function printP2(IndexArr $obj, $key)
  36. {
  37. $parent = $ obj- >search($key);
  38. if (!is_array($parent))
  39. {
  40. if ($parent)
  41. {
  42. echo '"'.$key.'" 親キーは: '.$parent. "< ;br />n";
  43. }
  44. else echo '親がいない、または ".$key.'" の検索がありません!'."
    n";;
  45. echo '"'。 $key .'" 親 "'.$parent.'" 値は: ';
  46. printA($obj->parentValue($key));
  47. }
  48. else printA($parent);
  49. }
  50. class IndexArr
  51. {
  52. private $_arr = array();
  53. public function __construct($data)
  54. {
  55. $this->_createIndex($data);
  56. }
  57. public function printArr()
  58. {
  59. return (Array)$this- > _arr;
  60. }
  61. パブリック関数 search($key)
  62. {
  63. return isset($this->_arr[$key]) $this->_arr[$key]['parent'] : NULL;
  64. }
  65. public functionparentValue($key)
  66. {
  67. return isset($this->_arr[$key]) $this->_arr[$key]['data'] : NULL;
  68. }
  69. private function _createIndex ($data, $parent = NULL)
  70. {
  71. foreach ($data as $key =>$value)
  72. {
  73. $this->checkIndex($key, $parent, $data);
  74. if ( is_array( $value))
  75. {
  76. $this->_createIndex($value, $key);
  77. }
  78. }
  79. }
  80. プライベート関数 _checkIndex($key, $parent, $data)
  81. {
  82. $data = $親 & isset($data[$parent]) ? $data[$parent] : $data;
  83. !isset($this->arr[$key]) & $this->arr[$key] = 配列(' data' => $data, 'parent' => '');
  84. $index = &$this->_arr[$key]['parent'];
  85. if (!empty($index) )
  86. {
  87. if (is_array($index))
  88. {
  89. array_push($index, $parent);
  90. }
  91. else $index = array($index, $parent);
  92. }
  93. else $index = $parent;
  94. }
  95. }
  96. $index2 = (Object)new IndexArr($arr);
  97. printA($index2->printArr());
  98. printP2($index2, '北京');
  99. printP2($index2, '名前') ;
  100. printP2($index2, 'china');
  101. ?>
コードをコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート