That's what I think: 
Iterate over the multidimensional array, all the keys to build an index to generate a one-dimensional array; 
Each time through the key name to check the parent array of this key and data 
OK, the code is as follows 
Indexkey to create an indexed array function: 
 
 
  
  Copy Code code as follows: 
 
 
  
 
 
<?php 
 
/** 
 
* FILE_NAME:arr.php file_path:test/ 
 
* Query the parent key and the parent key value quickly in a multidimensional array based on the key name 
 
* 
 
* @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 
 
( 
 
' => ' array 
 
( 
 
' Name ' => ' China ', 
 
' Cite ' => array 
 
( 
 
' Beijing ' => array 
 
( 
 
' Name ' => ' Beijing ', 
 
' Site ' => array (' Chaoyang ' => ' Chaoyang District ', ' Xuanwu ' => ' Xuanwu District ') 
 
), 
 
' Shanghai ' => array 
 
( 
 
' Name ' => ' Shanghai ', 
 
' Site ' => array (' Jingan ' => ' Jingan ', ' Huangpu ' => ' Huangpu ') 
 
) 
 
) 
 
) 
 
); 
 
function PrintA ($data) 
 
{ 
 
Echo ' <pre> '; 
 
Print_r ($data); 
 
Echo ' </pre> '; 
 
} 
 
function Indexkey ($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)); 
 
?> 
 
 
 
Print out the following data 
Array 
( 
[=>] 
[Name] => 
[Cite] => 
[Beijing] => cite 
[Site] => Beijing 
[Chaoyang] => site 
[Xuanwu] => site 
[Shanghai] => cite 
[Jingan] => site 
[Huangpu] => site 
) 
But there is a problem with that: if there is a key with the same name, it will cause loss, so I wrote a class 
Only need to pass the array to the object, which provides two interfaces 
Printarr Print Index Array 
The parent array key name of the search query key name 
Indexkey Create query Index query class: 
 
 
  
  Copy Code code as follows: 
 
 
  
 
 
<?php 
 
/** 
 
* FILE_NAME:arr.php file_path:test/ 
 
* Query the parent key and the parent key value quickly in a multidimensional array based on the key name 
 
* 
 
* @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 
 
( 
 
' => ' array 
 
( 
 
' Name ' => ' China ', 
 
' Cite ' => array 
 
( 
 
' Beijing ' => array 
 
( 
 
' Name ' => ' Beijing ', 
 
' Site ' => array (' Chaoyang ' => ' Chaoyang District ', ' Xuanwu ' => ' Xuanwu District ') 
 
), 
 
' Shanghai ' => array 
 
( 
 
' Name ' => ' Shanghai ', 
 
' Site ' => array (' Jingan ' => ' Jingan ', ' Huangpu ' => ' Huangpu ') 
 
) 
 
) 
 
) 
 
); 
 
function PrintA ($data) 
 
{ 
 
Echo ' <pre> '; 
 
Print_r ($data); 
 
Echo ' </pre> '; 
 
} 
 
function printp (Indexkey $obj, $key) 
 
{ 
 
$parent = $obj->search ($key); 
 
if ($parent) 
 
{ 
 
Echo ' "'. $key. '" Parent Key is: '; 
 
if (!is_array ($parent)) 
 
{ 
 
echo $parent. " <br/>\n "; 
 
} 
 
else PrintA ($parent); 
 
} 
 
else echo ' no Parent OR no ' Search of '. $key. '. ' <br/><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; 
 
} 
 
Private Function _createindex ($data, $parent = NULL) 
 
{ 
 
foreach ($data as $key => $value) 
 
{ 
 
$this->_checkindex ($key, $parent); 
 
if (Is_array ($value)) 
 
{ 
 
$this->_createindex ($value, $key); 
 
} 
 
} 
 
} 
 
Private Function _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, ' Beijing '); 
 
PRINTP ($index, ' name '); 
 
PRINTP ($index, ' it '); 
 
?> 
 
 
 
At the end of the output of only one data, so I modified the class 
Provides three external methods 
Printarr Print Index Array 
The parent array key name of the search query key name 
Parentvalue Query Parent Key value 
 
 
  
  Copy Code code as follows: 
 
 
  
 
 
/** 
 
* FILE_NAME:arr.php file_path:test/ 
 
* Query the parent key and the parent key value quickly in a multidimensional array based on the key name 
 
* 
 
* @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 
 
( 
 
' => ' array 
 
( 
 
' Name ' => ' China ', 
 
' Cite ' => array 
 
( 
 
' Beijing ' => array 
 
( 
 
' Name ' => ' Beijing ', 
 
' Site ' => array (' Chaoyang ' => ' Chaoyang District ', ' Xuanwu ' => ' Xuanwu District ') 
 
), 
 
' Shanghai ' => array 
 
( 
 
' Name ' => ' Shanghai ', 
 
' Site ' => array (' Jingan ' => ' Jingan ', ' Huangpu ' => ' Huangpu ') 
 
) 
 
) 
 
) 
 
); 
 
function PrintA ($data) 
 
{ 
 
Echo ' <pre> '; 
 
Print_r ($data); 
 
Echo ' </pre> '; 
 
} 
 
function printP2 (Indexarr $obj, $key) 
 
{ 
 
$parent = $obj->search ($key); 
 
if (!is_array ($parent)) 
 
{ 
 
if ($parent) 
 
{ 
 
Echo ' "'. $key. '" The Parent Key is: '. $parent. <br/>\n "; 
 
} 
 
else echo ' no Parent OR no ' Search of '. $key. '. ' <br/>\n ";; 
 
Echo ' "'. $key. '" Parent "'. $parent. '" Value is: '; 
 
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; 
 
} 
 
Public Function Search ($key) 
 
{ 
 
return Isset ($this->_arr[$key])? $this->_arr[$key] [' Parent ']: NULL; 
 
} 
 
Public Function Parentvalue ($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); 
 
} 
 
} 
 
} 
 
Private Function _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; 
 
} 
 
} 
 
$index 2 = (Object) new Indexarr ($arr); 
 
PrintA ($index 2->printarr ()); 
 
PrintP2 ($index 2, ' Beijing '); 
 
PrintP2 ($index 2, ' name '); 
 
PrintP2 ($index 2, ' it '); 
 
?> 
 
 
 
Source file code: Php_arr.rar