ホームページ バックエンド開発 PHPチュートリアル php在多维数组中根据键名快速查询其父键以及父键值的代码_PHP

php在多维数组中根据键名快速查询其父键以及父键值的代码_PHP

Jun 01, 2016 pm 12:16 PM
多次元配列

我这么想的:
遍历一遍多维数组,将所有的键建立索引生成一个一维数组;
每次通过键名去查这个键的上级数组及数据
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 '

1

'; <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 '

1

'; <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 '

1

'; <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');
?>

源文件代码:php_arr.rar
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 多次元配列ソートの次元の旅: 1 次元から多次元へ PHP 多次元配列ソートの次元の旅: 1 次元から多次元へ Apr 29, 2024 pm 09:09 PM

1 次元配列は sort() 関数を使用してソートされ、2 次元配列は usort() 関数を使用して内部要素によってソートされ、高次元配列は多層ネストされた usort() 関数を使用して階層要素によってソートされます。分解の問題を層ごとに解決することが鍵となります。

多次元配列を使用して 2 つの行列を乗算する Python プログラム 多次元配列を使用して 2 つの行列を乗算する Python プログラム Sep 11, 2023 pm 05:09 PM

行列は、行と列に配置された一連の数値です。 m 行 n 列の行列は mXn 行列と呼ばれ、m と n はその次元と呼ばれます。行列は、リストまたは NumPy 配列を使用して Python で作成された 2 次元配列です。一般に、行列の乗算は、最初の行列の行と 2 番目の行列の列を乗算することで実行できます。ここで、最初の行列の列数は 2 番目の行列の行数と等しくなければなりません。入力シナリオと出力シナリオ 2 つの行列 A と B があるとします。これら 2 つの行列の次元は、それぞれ 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 関数を使用して多次元配列に対して再帰操作を実行する方法 PHP で array_walk_recursive 関数を使用して多次元配列に対して再帰操作を実行する方法 Jun 26, 2023 am 11:40 AM

配列は、PHP で非常に一般的なデータ型です。場合によっては、多次元配列が関係する状況に直面することがありますが、この場合、すべての要素に対して同じ操作を実行する必要がある場合は、array_walk_recursive() 関数を使用できます。 array_walk_recursive() 関数は、PHP の非常に強力な再帰関数で、多次元配列に対して再帰操作を実行するのに役立ちます。多次元配列の各要素を再帰的に走査し、それに対応する操作を実行できます。

PHP で複数の配列を 1 つの多次元配列に結合する方法 PHP で複数の配列を 1 つの多次元配列に結合する方法 Jul 09, 2023 pm 01:08 PM

PHP で複数の配列を多次元配列にマージする方法 PHP 開発では、複数の配列を 1 つの多次元配列にマージする必要がよく発生します。この操作は、大規模なデータ コレクションを操作する場合に非常に便利で、データをより適切に整理して処理するのに役立ちます。この記事では、この操作を実現するためのいくつかの一般的な方法を紹介し、参考用のコード例を添付します。方法 1: array_merge 関数を使用する. array_merge 関数は、PHP でよく使用される配列結合関数であり、複数の配列を結合できます。

PHPで多次元配列をソートする方法 PHPで多次元配列をソートする方法 Jul 07, 2023 pm 12:45 PM

PHP で多次元配列をソートする方法 PHP では、配列は非常に一般的かつ重要なデータ構造であり、一部の複雑なデータ処理では多次元配列がより頻繁に使用されます。ただし、多次元配列のソートは難しい場合があります。この記事では、PHP で多次元配列を並べ替える方法と、具体的なコード例を示します。始める前に、まず多次元配列の構造を理解しましょう。多次元配列とは、配列内の要素も配列であり、入れ子構造を形成していることを意味します。例: $st

多次元 PHP 配列を反転する効率的な方法 多次元 PHP 配列を反転する効率的な方法 Apr 29, 2024 am 09:00 AM

多次元 PHP 配列を反転する 2 つの効果的な方法: array_reverse() 関数を再帰的に使用: ネストされた各配列の要素を再帰的に反転します。 PHP7 の array_reverse() 関数: array_reverse() 関数の新しいオーバーロードを使用して、多次元配列を反転します。

PHP 配列の詳細な説明: 多次元配列、連想配列などの包括的な分析。 PHP 配列の詳細な説明: 多次元配列、連想配列などの包括的な分析。 Mar 13, 2024 pm 02:36 PM

PHP 配列の詳細な説明: 多次元配列、連想配列などの包括的な分析 PHP の配列は、複数のデータ項目を格納し、インデックスを介してそれらにアクセスできる非常に重要なデータ構造です。 PHP では、配列はインデックス付き配列、連想配列、多次元配列などのさまざまなタイプに分類でき、それぞれのタイプには独自の用途と特性があります。この記事では、配列の宣言、アクセス、走査、操作の方法など、さまざまな種類の PHP 配列について詳しく説明し、読者の理解を助ける具体的なコード例を提供します。 1. インデックス配列のインデックス番号

PHPで多次元配列をループする方法 PHPで多次元配列をループする方法 Jul 07, 2023 am 10:17 AM

PHP で多次元配列をループする方法 PHP では、配列は複数の値を保持できる強力なデータ構造です。多次元配列は配列をさらに拡張したもので、複数の配列に対応できます。ループ トラバーサルは、多次元配列を扱うときの一般的な操作メソッドです。この記事では、さまざまなループ メソッドを使用して PHP で多次元配列をトラバースする方法と、対応するコード例を紹介します。 for ループを使用して多次元配列を走査することは、最も一般的で広く使用されているループ方法の 1 つであり、複数の for ループをネストできます。

See all articles