php在多维数组中根据键名快速查询其父键以及父键值的代码
有一个多维数组,有多少维大家可以自定义。假如我们要在这个数组中找一个键为'subIndex'的值,我们可以用for、foreach等方法遍历查找 反过来,假如我们任意给出一个或多个键,要求找出这个键的父级数组的键和值。这又如何实现?
我这么想的:
遍历一遍多维数组,将所有的键建立索引生成一个一维数组;
每次通过键名去查这个键的上级数组及数据
OK,代码如下
indexKey创建索引数组函数:
代码如下:
/**
* 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
(
'china' => array
(
'name' => '中国',
'cite' => array
(
'beijing' => array
(
'name' => '北京',
'site' => array('chaoyang' => '朝阳区', 'xuanwu' => '宣武区')
),
'shanghai' => array
(
'name' => '上海',
'site' => array('jingan' => '静安区', 'huangpu' => '黄浦区')
)
)
)
);
function printA($data)
{
echo '
'; <br>print_r($data); <br>echo '
}
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));
?>
打印出数据如下
Array
(
[china] =>
[name] => china
[cite] => china
[beijing] => cite
[site] => beijing
[chaoyang] => site
[xuanwu] => site
[shanghai] => cite
[jingan] => site
[huangpu] => site
)
不过上面那样写存在一个问题,即:如果有同名键,会造成丢失,于是我写了这么一个类
只需要将数组传递给对象,对象提供两个接口
printArr 打印索引数组
search 查询键名的父数组键名
IndexKey创建查询索引查询类:
代码如下:
/**
* 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
(
'china' => array
(
'name' => '中国',
'cite' => array
(
'beijing' => array
(
'name' => '北京',
'site' => array('chaoyang' => '朝阳区', 'xuanwu' => '宣武区')
),
'shanghai' => array
(
'name' => '上海',
'site' => array('jingan' => '静安区', 'huangpu' => '黄浦区')
)
)
)
);
function printA($data)
{
echo '
'; <br>print_r($data); <br>echo '
}
function printP(IndexKey $obj, $key)
{
$parent = $obj->search($key);
if ($parent)
{
echo '"'.$key.'" Parent Key is: ';
if (!is_array($parent))
{
echo $parent."
\n";
}
else printA($parent);
}
else echo 'NO Parent OR No Search of "'.$key.'"!'."
\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, 'china');
?>
最后只差一个数据的输出了,于是我将这个类修改了下
提供了三个对外的方法
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
(
'china' => array
(
'name' => '中国',
'cite' => array
(
'beijing' => array
(
'name' => '北京',
'site' => array('chaoyang' => '朝阳区', 'xuanwu' => '宣武区')
),
'shanghai' => array
(
'name' => '上海',
'site' => array('jingan' => '静安区', 'huangpu' => '黄浦区')
)
)
)
);
function printA($data)
{
echo '
'; <br>print_r($data); <br>echo '
}
function printP2(IndexArr $obj, $key)
{
$parent = $obj->search($key);
if (!is_array($parent))
{
if ($parent)
{
echo '"'.$key.'" Parent Key is: '.$parent."
\n";
}
else echo 'NO Parent OR No Search of "'.$key.'"!'."
\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;
}
}
$index2 = (Object)new IndexArr($arr);
printA($index2->printArr());
printP2($index2, 'beijing');
printP2($index2, 'name');
printP2($index2, 'china');
?>
源文件代码:

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











1차원 배열은 sort() 함수를 사용하여 정렬하고, 2차원 배열은 usort() 함수를 사용하여 내부 요소별로 정렬하며, 고차원 배열은 다층 중첩 usort() 함수를 사용하여 계층적 요소별로 정렬합니다. 분해 문제를 레이어별로 해결하는 것이 핵심입니다.

행렬은 행과 열로 배열된 숫자의 집합입니다. m행과 n열로 구성된 행렬을 mXn 행렬이라고 하며, m과 n을 차원이라고 합니다. 행렬은 목록이나 NumPy 배열을 사용하여 Python에서 만든 2차원 배열입니다. 일반적으로 행렬 곱셈은 첫 번째 행렬의 행과 두 번째 행렬의 열을 곱하여 수행할 수 있습니다. 여기서 첫 번째 행렬의 열 개수는 두 번째 행렬의 행 개수와 같아야 합니다. 입력 및 출력 시나리오 두 개의 행렬 A와 B가 있다고 가정합니다. 이 두 행렬의 차원은 각각 2X3과 3X2입니다. 곱셈 후 결과 행렬은 2개의 행과 1개의 열을 갖게 됩니다. [b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

배열은 PHP에서 매우 일반적인 데이터 유형입니다. 때때로 다차원 배열과 관련된 상황에 직면하게 됩니다. 이 경우 모든 요소에 대해 동일한 작업을 수행해야 하는 경우 array_walk_recursive() 함수를 사용할 수 있습니다. array_walk_recursive() 함수는 다차원 배열에 대한 재귀 작업을 수행하는 데 도움이 되는 PHP의 매우 강력한 재귀 함수입니다. 다차원 배열의 각 요소를 재귀적으로 순회하고 그에 상응하는 작업을 수행할 수 있습니다.

PHP에서 여러 배열을 다차원 배열로 병합하는 방법 PHP 개발에서 여러 배열을 다차원 배열로 병합해야 하는 경우가 종종 있습니다. 이 작업은 대규모 데이터 컬렉션을 운영할 때 매우 유용하며 데이터를 더 잘 구성하고 처리하는 데 도움이 될 수 있습니다. 이 문서에서는 이 작업을 수행하는 몇 가지 일반적인 방법을 소개하고 참조용 코드 예제를 첨부합니다. 방법 1: array_merge 함수를 사용합니다. array_merge 함수는 PHP에서 일반적으로 사용되는 배열 병합 함수입니다. 여러 배열을 병합할 수 있습니다.

PHP에서 다차원 배열을 정렬하는 방법 PHP에서 배열은 매우 일반적이고 중요한 데이터 구조이며 다차원 배열은 일부 복잡한 데이터 처리에서 더 자주 사용됩니다. 그러나 다차원 배열을 정렬하는 것은 까다로울 수 있습니다. 이 기사에서는 PHP에서 다차원 배열을 정렬하는 방법과 구체적인 코드 예제를 제공합니다. 시작하기 전에 먼저 다차원 배열의 구조를 이해해 봅시다. 다차원 배열은 배열의 요소가 중첩된 구조를 형성하는 배열이기도 함을 의미합니다. 예: $st

다차원 PHP 배열을 역전시키는 두 가지 효과적인 방법: array_reverse() 함수를 재귀적으로 사용: 각 중첩 배열의 요소를 재귀적으로 역전시킵니다. PHP7의 array_reverse() 함수: array_reverse() 함수의 새로운 오버로드를 사용하여 다차원 배열을 뒤집습니다.

PHP 배열에 대한 심층적인 논의: 다차원 배열, 연관 배열 등에 대한 포괄적인 분석. PHP에서 배열은 여러 데이터 항목을 저장하고 인덱스를 통해 액세스할 수 있는 매우 중요한 데이터 구조입니다. PHP에서 배열은 인덱스 배열, 연관 배열, 다차원 배열 등 다양한 유형으로 나눌 수 있습니다. 각 유형에는 고유한 용도와 특성이 있습니다. 이 기사에서는 배열을 선언하고, 액세스하고, 순회하고, 작동하는 방법을 포함하여 다양한 유형의 PHP 배열을 자세히 살펴보고 독자의 이해를 돕기 위해 구체적인 코드 예제를 제공합니다. 1. 인덱스 배열 인덱스 번호

PHP에서 다차원 배열을 반복하는 방법 PHP에서 배열은 여러 값을 보유할 수 있는 강력한 데이터 구조입니다. 다차원 배열은 배열의 추가 확장이며 여러 배열을 수용할 수 있습니다. 루프 순회는 다차원 배열을 처리할 때 일반적인 작업 방법입니다. 이 기사에서는 다양한 루프 방법을 사용하여 PHP에서 다차원 배열을 순회하는 방법을 소개하고 해당 코드 예제를 제공합니다. for 루프를 사용하여 다차원 배열을 순회하는 것은 가장 일반적이고 널리 사용되는 루프 방법 중 하나입니다. 여러 for 루프를 중첩할 수 있습니다.
