php在多维数组中根据键名快速查询其父键以及父键值的代码_PHP
我这么想的:
遍历一遍多维数组,将所有的键建立索引生成一个一维数组;
每次通过键名去查这个键的上级数组及数据
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');
?>
源文件代码:php_arr.rar

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tatasusunan satu dimensi diisih menggunakan fungsi sort(), tatasusunan dua dimensi diisih mengikut elemen dalaman menggunakan fungsi usort() dan tatasusunan dimensi tinggi diisih mengikut elemen hierarki menggunakan fungsi usort() bersarang berbilang lapisan. Menyelesaikan masalah penguraian lapisan demi lapisan adalah kuncinya.

Matriks ialah satu set nombor yang disusun dalam baris dan lajur. Matriks dengan m baris dan n lajur dipanggil matriks mXn, dan m dan n dipanggil dimensinya. Matriks ialah tatasusunan dua dimensi yang dibuat dalam Python menggunakan senarai atau tatasusunan NumPy. Secara umum, pendaraban matriks boleh dilakukan dengan mendarab baris matriks pertama dengan lajur matriks kedua. Di sini, bilangan lajur matriks pertama hendaklah sama dengan bilangan baris matriks kedua. Senario input dan output Katakan kita mempunyai dua matriks A dan B. Dimensi kedua-dua matriks ini ialah 2X3 dan 3X2 masing-masing. Matriks yang terhasil selepas pendaraban akan mempunyai 2 baris dan 1 lajur. [b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

Bagaimana untuk menggabungkan berbilang tatasusunan ke dalam tatasusunan berbilang dimensi dalam PHP Dalam pembangunan PHP, kita sering menghadapi keperluan untuk menggabungkan berbilang tatasusunan menjadi tatasusunan berbilang dimensi. Operasi ini sangat berguna apabila mengendalikan pengumpulan data yang besar dan boleh membantu kami menyusun dan memproses data dengan lebih baik. Artikel ini akan memperkenalkan anda kepada beberapa kaedah yang biasa digunakan untuk mencapai operasi ini, dan melampirkan contoh kod untuk rujukan. Kaedah 1: Gunakan fungsi array_merge Fungsi array_merge ialah fungsi penggabungan tatasusunan yang biasa digunakan dalam PHP.

Tatasusunan ialah jenis data yang sangat biasa dalam PHP. Kadangkala, kita akan menghadapi situasi yang melibatkan tatasusunan berbilang dimensi Dalam kes ini, jika kita perlu melakukan operasi yang sama pada semua elemen, kita boleh menggunakan fungsi array_walk_recursive(). Fungsi array_walk_recursive() ialah fungsi rekursif yang sangat berkuasa dalam PHP yang boleh membantu kami melaksanakan operasi rekursif pada tatasusunan berbilang dimensi. Ia boleh melintasi setiap elemen tatasusunan berbilang dimensi secara rekursif dan melakukan operasi yang sepadan padanya.

Dua cara yang berkesan untuk membalikkan tatasusunan PHP berbilang dimensi: Secara rekursif menggunakan fungsi array_reverse(): Membalikkan secara rekursif elemen setiap tatasusunan bersarang. Fungsi array_reverse() PHP7: Gunakan lebihan baharu fungsi array_reverse() untuk membalikkan tatasusunan berbilang dimensi.

Cara mengisih tatasusunan berbilang dimensi dalam PHP Dalam PHP, tatasusunan ialah struktur data yang sangat biasa dan penting, dan tatasusunan berbilang dimensi digunakan dengan lebih kerap dalam beberapa pemprosesan data yang kompleks. Walau bagaimanapun, menyusun tatasusunan berbilang dimensi boleh menjadi agak rumit. Artikel ini akan menunjukkan kepada anda cara mengisih tatasusunan berbilang dimensi dalam PHP dan memberikan contoh kod khusus. Sebelum kita mula, mari kita fahami struktur tatasusunan berbilang dimensi. Tatasusunan multidimensi bermakna unsur-unsur dalam tatasusunan juga merupakan tatasusunan, membentuk struktur bersarang. Contohnya: $st

Perbincangan mendalam tentang tatasusunan PHP: tatasusunan berbilang dimensi, tatasusunan bersekutu, dsb. Analisis komprehensif Tatasusunan dalam PHP ialah struktur data yang sangat penting yang boleh menyimpan berbilang item data dan mengaksesnya melalui indeks. Dalam PHP, tatasusunan boleh dibahagikan kepada jenis yang berbeza seperti tatasusunan diindeks, tatasusunan bersekutu, dan tatasusunan berbilang dimensi Setiap jenis mempunyai kegunaan dan ciri tersendiri. Artikel ini akan menyelidiki pelbagai jenis tatasusunan PHP, termasuk cara mengisytiharkan, mengakses, melintasi dan mengendalikan tatasusunan, dan akan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Nombor indeks tatasusunan indeks

Cara untuk menggelung melalui tatasusunan berbilang dimensi dalam PHP Dalam PHP, tatasusunan ialah struktur data yang berkuasa yang boleh menyimpan berbilang nilai. Tatasusunan berbilang dimensi ialah lanjutan tatasusunan selanjutnya dan boleh menampung pelbagai tatasusunan. Loop traversal ialah kaedah operasi biasa apabila berurusan dengan tatasusunan berbilang dimensi Artikel ini akan memperkenalkan cara menggunakan kaedah gelung yang berbeza untuk melintasi tatasusunan berbilang dimensi dalam PHP dan menyediakan contoh kod yang sepadan. Menggunakan untuk gelung untuk melintasi tatasusunan berbilang dimensi untuk gelung ialah salah satu kaedah gelung yang paling biasa dan digunakan secara meluas. Ia boleh menyarang berbilang untuk gelung.
