> 백엔드 개발 > PHP 튜토리얼 > 키 이름을 기반으로 PHP 다차원 배열의 상위 키와 상위 키 값을 빠르게 쿼리합니다.

키 이름을 기반으로 PHP 다차원 배열의 상위 키와 상위 키 값을 빠르게 쿼리합니다.

WBOY
풀어 주다: 2016-07-25 09:04:27
원래의
1473명이 탐색했습니다.
  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("콘텐츠 유형: text/html; charset=utf-8" );
  13. $arr = 배열
  14. (
  15. 'china' => 배열
  16. (
  17. 'name' => '중국',
  18. 'cite' => 배열
  19. (
  20. 'beijing' => 배열
  21. (
  22. 'name' => 'Beijing',
  23. 'site' => array('chaoyang' => 'Chaoyang District', 'xuanwu' => '쉬안우 지구')
  24. ),
  25. 'shanghai' => 배열
  26. (
  27. 'name' => 'Shanghai',
  28. ' 사이트 ' => array('jingan' => '징안구', '황푸' => '황푸구')
  29. )
  30. )
  31. )
  32. );
  33. function printA($data)
  34. {
  35. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  36. }
  37. function indexKey($data, $parent = NULL)
  38. {
  39. $arr = array();
  40. foreach($data를 $key => $value로)
  41. {
  42. $arr[ $ key] = $parent;
  43. if (is_array($value))
  44. {
  45. $arr = indexKey($value, $key);
  46. }
  47. }
  48. return ( Array )$arr;
  49. }
  50. printA(indexKey($arr));
  51. ?>
코드 복사

데이터 인쇄 다음과 같이 정렬 ( [중국] => [이름] => 중국 [인용] => 중국 [베이징] => 인용 [사이트] => 베이징 [조양] => 사이트 [쉬안우] => 사이트 [상하이] => 인용 [징안] => 사이트 [황푸] => 사이트 ) 하지만 위의 내용을 작성하는 데에는 문제가 있습니다. 즉, 동일한 이름의 키가 있으면 손실되므로 이러한 클래스를 작성했습니다. 배열을 객체에 전달하기만 하면 객체는 두 개의 인터페이스를 제공합니다. printArr은 인덱스 배열을 인쇄합니다. 검색은 키 이름의 상위 배열 키 이름을 쿼리합니다. IndexKey는 쿼리 인덱스 쿼리 클래스를 생성합니다.

  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("콘텐츠 유형: text/html; charset=utf -8");
  13. $arr = 배열
  14. (
  15. 'china' => 배열
  16. (
  17. 'name' => '중국',
  18. 'cite' = > array
  19. (
  20. 'beijing' => array
  21. (
  22. 'name' => 'Beijing',
  23. 'site' => array('chaoyang' => ; ' 조양구', '쉬안우' => '쉬안우구')
  24. ),
  25. '상하이' => 배열
  26. (
  27. '이름' => '상하이',
  28. 'site' => array('jingan' => '징안구', '황푸' => '황푸구')
  29. )
  30. )
  31. )
  32. );
  33. function printA($data)
  34. {
  35. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  36. }
  37. function printP(IndexKey $obj, $key)
  38. {
  39. $parent = $obj->search($key);
  40. if ($parent)
  41. {
  42. echo '" '.$key.'" 상위 키는 ';
  43. if (!is_array($parent))
  44. {
  45. echo $parent."
    n";
  46. }
  47. else printA($parent);
  48. }
  49. else echo '부모 없음 또는 "'.$key.'" 검색 없음!'."

    n";
  50. }
  51. class IndexKey
  52. {
  53. private $_arr = array();
  54. public function __construct($data)
  55. {
  56. $this->_createIndex ($data);
  57. }
  58. 공용 함수 printArr()
  59. {
  60. return (Array)$this->_arr;
  61. }
  62. 공용 함수 검색($key)
  63. {
  64. return isset($this->_arr[$key]) ? $this->_arr[$key] : NULL;
  65. }
  66. 비공개 함수 _createIndex($data, $parent = NULL)
  67. {
  68. foreach($data as $key => $value)
  69. {
  70. $this->_checkIndex($key, $parent);
  71. if(is_array ($value))
  72. {
  73. $this->_createIndex($value, $key);
  74. }
  75. }
  76. }
  77. 비공개 함수 _checkIndex($key, $parent) )
  78. {
  79. $index = isset($this->_arr[$key]) ? $this->_arr[$key] : NULL;
  80. if ($index)
  81. {
  82. if (is_array($index))
  83. {
  84. array_push($this->_arr[$key], $parent);
  85. }
  86. else $this->_arr[ $key] = 배열($index, $parent);
  87. }
  88. else $this->_arr[$key] = $parent;
  89. }
  90. }
  91. $index = ( Object)new IndexKey($arr);
  92. printA($index->printArr());
  93. printP($index, 'beijing');
  94. printP($index, 'name');
  95. printP($index, 'china');
  96. ?>
코드 복사

결국 데이터 출력이 하나밖에 남지 않아서 이 클래스를 수정했습니다. 세 가지 외부 메소드 제공 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("콘텐츠 유형: text/html; charset=utf -8");
  13. $arr = 배열
  14. (
  15. 'china' => 배열
  16. (
  17. 'name' => '중국',
  18. 'cite' = > array
  19. (
  20. 'beijing' => array
  21. (
  22. 'name' => 'Beijing',
  23. 'site' => array('chaoyang' => ; ' 조양구', '쉬안우' => '쉬안우구')
  24. ),
  25. '상하이' => 배열
  26. (
  27. '이름' => '상하이',
  28. 'site' => array('jingan' => '징안구', '황푸' => '황푸구')
  29. )
  30. )
  31. )
  32. );
  33. function printA($data)
  34. {
  35. echo '
    ';</li>
    <li>print_r($data);</li>
    <li>echo '
    ';
  36. }
  37. function printP2(IndexArr $obj, $key)
  38. {
  39. $parent = $obj->search($key);
  40. if (!is_array($parent))
  41. {
  42. if ($parent)
  43. {
  44. echo '"'.$key.'" 상위 키는 '.$parent."
    n";
  45. }
  46. else echo '부모 없음 또는 "'.$key.'" 검색 없음!'."
    n";;
  47. echo '"'.$key.'" 부모 "'.$parent. '" 값은 다음과 같습니다. ';
  48. printA($obj->parentValue($key));
  49. }
  50. else printA($parent);
  51. }
  52. class IndexArr
  53. {
  54. 비공개 $_arr = array();
  55. 공용 함수 __construct($data)
  56. {
  57. $this->_createIndex($data);
  58. }
  59. 공용 함수 printArr ()
  60. {
  61. return (Array)$this->_arr;
  62. }
  63. 공개 함수 검색($key)
  64. {
  65. return isset($this->_arr [$key]) ? $this->_arr[$key]['parent'] : NULL;
  66. }
  67. 공용 함수 parentValue($key)
  68. {
  69. return isset($this ->_arr[$key]) ? $this->_arr[$key]['data'] : NULL;
  70. }
  71. 비공개 함수 _createIndex($data, $parent = NULL)
  72. {
  73. foreach ($data as $key => $value)
  74. {
  75. $this->_checkIndex($key, $parent, $data);
  76. if (is_array($value) ))
  77. {
  78. $this->_createIndex($value, $key);
  79. }
  80. }
  81. }
  82. 비공개 함수 _checkIndex($key, $parent, $data )
  83. {
  84. $data = $parent & isset($data[$parent]) ? $data[$parent] : $data;
  85. !isset($this->_arr[$key] ) & $this->_arr[$key] = array('data' => $data, 'parent' => '');
  86. $index = &$this->_arr[$key ]['parent'];
  87. if (!empty($index))
  88. {
  89. if (is_array($index))
  90. {
  91. array_push($index, $parent);
  92. }
  93. else $index = array($index, $parent);
  94. }
  95. else $index = $parent;
  96. }
  97. }
  98. $index2 = (객체 )new IndexArr($arr);
  99. printA($index2->printArr());
  100. printP2($index2, 'beijing');
  101. printP2($index2, 'name');
  102. printP2($index2, 'china');
  103. ?>
코드 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿