巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

php在多维数组中按照键名疾速查问其父键和父键值的代码

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-30 09:22:28 阅读数: 120

我这么想的:
遍历一遍多维数组,将一切的键成立索引天生一个一维数组;
每次经由过程键名去查这个键的下级数组及数据
OK,代码以下
indexKey建立索引数组函数:
复制代码 代码以下:
<?php
/**
* FILE_NAME : arr.php FILE_PATH : test/
* 在多维数组中按照键名疾速查问其父键和父键值
*
* @copyright Copyright (c) 2006-2010 mail:levi@cgfeel.com
* @author Levi
* @package test.arr
* @subpackage
* @version 2012-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 "<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));
?>

打印出数据以下
Array
(
[china] =>
[name] => china
[cite] => china
[beijing] => cite
[site] => beijing
[chaoyang] => site
[xuanwu] => site
[shanghai] => cite
[jingan] => site
[huangpu] => site
)
不过下面那样写存在一个题目,即:若是有同名键,会形成丧失,因而我写了这么一个类
只要要将数组通报给工具,工具供给两个接口
printArr 打印索引数组
search 查问键名的父数组键名
IndexKey建立查问索引查问类:
复制代码 代码以下:
<?php
/**
* FILE_NAME : arr.php FILE_PATH : test/
* 在多维数组中按照键名疾速查问其父键和父键值
*
* @copyright Copyright (c) 2006-2010 mail:levi@cgfeel.com
* @author Levi
* @package test.arr
* @subpackage
* @version 2012-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 "<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 /> ";
}
else printA($parent);
}
else echo "NO Parent OR No Search of "".$key.""!"."<br /><br /> ";
}
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 2012-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 "<pre>";
print_r($data);
echo "</pre>";
}
function printP2(IndexArr $obj, $key)
{
$parent = $obj->search($key);
if (!is_array($parent))
{
if ($parent)
{
echo """.$key."" Parent Key is: ".$parent."<br /> ";
}
else echo "NO Parent OR No Search of "".$key.""!"."<br /> ";;
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
一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。比来几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

20
04月
Html5完成二维码扫描并剖析

引子: 比来公司名目有个须要,微博客户端中, h5 的页面上的某个按钮能够或许与native 交互呼起摄像头,扫描二维码并且剖析。在非微博客户端... >>概况

28
04月
PHP操纵strtotime计较两个给定日期

本文实例报告了PHP操纵strtotime计较两个给定日期之间天数的体例。分享给大师供大师参考。详细阐发以下:PHP的strtotime函数... >>概况

28
04月
Mac体系下操纵brew搭建PHP(LNMP

Mac下搭建lamp开辟情况很轻易,有xampp和mamp现成的集成情况。可是集成情况对常常须要自界说一些设置装备摆设的开辟者来讲会很是费事,并且... >>概况

18
05月
马明哲力推“奇异钱包”搭建互联网金融平台-w

window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站