求教,多维数组处理
各位大神,我有一个多维数组,结构如下
array(7) { ["hardware"]=> array(1) { ["status"]=> string(2) "on" } ["software"]=> array(2) { ["systemchk"]=> array(2) { ["status"]=> string(2) "on" ["system"]=> array(3) { ["xp"]=> array(3) { ["status"]=> string(2) "on" ["sp"]=> string(1) "1" ["KB"]=> string(0) "" } ["win7"]=> array(3) { ["status"]=> string(2) "on" ["sp"]=> string(1) "1" ["KB"]=> string(0) "" } ["win8"]=> array(3) { ["status"]=> string(2) "on" ["sp"]=> string(1) "1" ["KB"]=> string(0) "" } } } ["softwarechk"]=> array(2) { ["status"]=> string(3) "off" ["softfp"]=> array(2) { [0]=> array(3) { ["softfp_oid"]=> string(18) "DEFAULT_SOFTFP_VRV" ["list"]=> string(1) "1" ["group"]=> string(0) "" } [1]=> array(3) { ["softfp_oid"]=> string(18) "DEFAULT_SOFTFP_TMP" ["list"]=> string(1) "0" ["group"]=> string(0) "" } } } } ["safechk"]=> array(7) { ["macchk"]=> array(1) { ["status"]=> string(2) "on" } ["agentchk"]=> array(1) { ["status"]=> string(2) "on" } ["termchk"]=> array(1) { ["status"]=> string(2) "on" } ["arpchk"]=> array(1) { ["status"]=> string(2) "on" } ["natchk"]=> array(1) { ["status"]=> string(2) "on" } ["screenchk"]=> array(3) { ["status"]=> string(2) "on" ["screenpwd"]=> string(1) "0" ["screentime"]=> string(1) "0" } ["oschk"]=> array(1) { ["status"]=> string(2) "on" } } ["illegalchk"]=> array(4) { ["status"]=> string(2) "on" ["pact"]=> string(4) "HTTP" ["ip"]=> string(0) "" ["port"]=> string(0) "" } ["udiskchk"]=> array(2) { ["status"]=> string(2) "on" ["action"]=> string(1) "0" } ["netcardchk"]=> array(7) { ["status"]=> string(2) "on" ["line"]=> string(1) "1" ["wireless"]=> string(1) "1" ["3g"]=> string(1) "1" ["vpn"]=> string(1) "1" ["other"]=> string(1) "1" ["total"]=> string(1) "6" } ["userchk"]=> array(1) { ["status"]=> string(2) "on" }}
我想在数组里面增加一个元素flag与status同级,也就是说,只要是有status出现的,就有flag元素与之匹配,请问,PHP有这样的函数,实现这个功能么?
回复讨论(解决方案)
php 不可能预知你的特殊需求,所以必须你自己写
$a = array( "hardware" => array( "status" => "on", ), "software" => array( "systemchk" => array( "status" => "on", "system" => array( "xp" => array( "status" => "on", "sp" => "1", "KB" => "", ), "win7" => array( "status" => "on", "sp" => "1", "KB" => "", ), "win8" => array( "status" => "on", "sp" => "1", "KB" => "", ), ), ), "softwarechk" => array( "status" => "off", "softfp" => array( 0 => array( "softfp_oid" => "DEFAULT_SOFTFP_VRV", "list" => "1", "group" => "", ), 1 => array( "softfp_oid" => "DEFAULT_SOFTFP_TMP", "list" => "0", "group" => "", ), ), ), ), "safechk" => array( "macchk" => array( "status" => "on", ), "agentchk" => array( "status" => "on", ), "termchk" => array( "status" => "on", ), "arpchk" => array( "status" => "on", ), "natchk" => array( "status" => "on", ), "screenchk" => array( "status" => "on", "screenpwd" => "0", "screentime" => "0", ), "oschk" => array( "status" => "on", ), ), "illegalchk" => array( "status" => "on", "pact" => "HTTP", "ip" => "", "port" => "", ), "udiskchk" => array( "status" => "on", "action" => "0", ), "netcardchk" => array( "status" => "on", "line" => "1", "wireless" => "1", "3g" => "1", "vpn" => "1", "other" => "1", "total" => "6", ), "userchk" => array( "status" => "on", ),);function addflag(&$ar) { if(! is_array($ar)) return;$ar; if(isset($ar['status'])) $ar['flag'] = ''; foreach($ar as &$v) addflag($v); return $ar;}var_export(addflag($a));
array ( 'hardware' => array ( 'status' => 'on', 'flag' => '', ), 'software' => array ( 'systemchk' => array ( 'status' => 'on', 'system' => array ( 'xp' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), 'win7' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), 'win8' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), ), 'flag' => '', ), 'softwarechk' => array ( 'status' => 'off', 'softfp' => array ( 0 => array ( 'softfp_oid' => 'DEFAULT_SOFTFP_VRV', 'list' => '1', 'group' => '', ), 1 => array ( 'softfp_oid' => 'DEFAULT_SOFTFP_TMP', 'list' => '0', 'group' => '', ), ), 'flag' => '', ), ), 'safechk' => array ( 'macchk' => array ( 'status' => 'on', 'flag' => '', ), 'agentchk' => array ( 'status' => 'on', 'flag' => '', ), 'termchk' => array ( 'status' => 'on', 'flag' => '', ), 'arpchk' => array ( 'status' => 'on', 'flag' => '', ), 'natchk' => array ( 'status' => 'on', 'flag' => '', ), 'screenchk' => array ( 'status' => 'on', 'screenpwd' => '0', 'screentime' => '0', 'flag' => '', ), 'oschk' => array ( 'status' => 'on', 'flag' => '', ), ), 'illegalchk' => array ( 'status' => 'on', 'pact' => 'HTTP', 'ip' => '', 'port' => '', 'flag' => '', ), 'udiskchk' => array ( 'status' => 'on', 'action' => '0', 'flag' => '', ), 'netcardchk' => array ( 'status' => 'on', 'line' => '1', 'wireless' => '1', '3g' => '1', 'vpn' => '1', 'other' => '1', 'total' => '6', 'flag' => '', ), 'userchk' => array ( 'status' => 'on', 'flag' => '', ),)
php 不可能预知你的特殊需求,所以必须你自己写
$a = array( "hardware" => array( "status" => "on", ), "software" => array( "systemchk" => array( "status" => "on", "system" => array( "xp" => array( "status" => "on", "sp" => "1", "KB" => "", ), "win7" => array( "status" => "on", "sp" => "1", "KB" => "", ), "win8" => array( "status" => "on", "sp" => "1", "KB" => "", ), ), ), "softwarechk" => array( "status" => "off", "softfp" => array( 0 => array( "softfp_oid" => "DEFAULT_SOFTFP_VRV", "list" => "1", "group" => "", ), 1 => array( "softfp_oid" => "DEFAULT_SOFTFP_TMP", "list" => "0", "group" => "", ), ), ), ), "safechk" => array( "macchk" => array( "status" => "on", ), "agentchk" => array( "status" => "on", ), "termchk" => array( "status" => "on", ), "arpchk" => array( "status" => "on", ), "natchk" => array( "status" => "on", ), "screenchk" => array( "status" => "on", "screenpwd" => "0", "screentime" => "0", ), "oschk" => array( "status" => "on", ), ), "illegalchk" => array( "status" => "on", "pact" => "HTTP", "ip" => "", "port" => "", ), "udiskchk" => array( "status" => "on", "action" => "0", ), "netcardchk" => array( "status" => "on", "line" => "1", "wireless" => "1", "3g" => "1", "vpn" => "1", "other" => "1", "total" => "6", ), "userchk" => array( "status" => "on", ),);function addflag(&$ar) { if(! is_array($ar)) return;$ar; if(isset($ar['status'])) $ar['flag'] = ''; foreach($ar as &$v) addflag($v); return $ar;}var_export(addflag($a));
array ( 'hardware' => array ( 'status' => 'on', 'flag' => '', ), 'software' => array ( 'systemchk' => array ( 'status' => 'on', 'system' => array ( 'xp' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), 'win7' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), 'win8' => array ( 'status' => 'on', 'sp' => '1', 'KB' => '', 'flag' => '', ), ), 'flag' => '', ), 'softwarechk' => array ( 'status' => 'off', 'softfp' => array ( 0 => array ( 'softfp_oid' => 'DEFAULT_SOFTFP_VRV', 'list' => '1', 'group' => '', ), 1 => array ( 'softfp_oid' => 'DEFAULT_SOFTFP_TMP', 'list' => '0', 'group' => '', ), ), 'flag' => '', ), ), 'safechk' => array ( 'macchk' => array ( 'status' => 'on', 'flag' => '', ), 'agentchk' => array ( 'status' => 'on', 'flag' => '', ), 'termchk' => array ( 'status' => 'on', 'flag' => '', ), 'arpchk' => array ( 'status' => 'on', 'flag' => '', ), 'natchk' => array ( 'status' => 'on', 'flag' => '', ), 'screenchk' => array ( 'status' => 'on', 'screenpwd' => '0', 'screentime' => '0', 'flag' => '', ), 'oschk' => array ( 'status' => 'on', 'flag' => '', ), ), 'illegalchk' => array ( 'status' => 'on', 'pact' => 'HTTP', 'ip' => '', 'port' => '', 'flag' => '', ), 'udiskchk' => array ( 'status' => 'on', 'action' => '0', 'flag' => '', ), 'netcardchk' => array ( 'status' => 'on', 'line' => '1', 'wireless' => '1', '3g' => '1', 'vpn' => '1', 'other' => '1', 'total' => '6', 'flag' => '', ), 'userchk' => array ( 'status' => 'on', 'flag' => '', ),)
我写的代码,比你多了好多行,?死了,结贴,给分。。。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

使用foreach循环去除PHP数组中重复元素的方法如下:遍历数组,若元素已存在且当前位置不是第一个出现的位置,则删除它。举例而言,若数据库查询结果存在重复记录,可使用此方法去除,得到不含重复记录的结果。

PHP数组键值翻转方法性能对比表明:array_flip()函数在大型数组(超过100万个元素)下比for循环性能更优,耗时更短。手动翻转键值的for循环方法耗时相对较长。

PHP中深度复制数组的方法包括:使用json_decode和json_encode进行JSON编码和解码。使用array_map和clone进行深度复制键和值的副本。使用serialize和unserialize进行序列化和反序列化。

多维数组排序可分为单列排序和嵌套排序。单列排序可使用array_multisort()函数按列排序;嵌套排序需要递归函数遍历数组并排序。实战案例包括按产品名称排序和按销售量和价格复合排序。

在PHP中执行数组深度复制的最佳实践是:使用json_decode(json_encode($arr))将数组转换为JSON字符串,然后再将其转换回数组。使用unserialize(serialize($arr))将数组序列化为字符串,然后将其反序列化为新数组。使用RecursiveIteratorIterator迭代器对多维数组进行递归遍历。

PHP的array_group_by函数可根据键或闭包函数对数组中的元素分组,返回一个关联数组,其中键是组名,值是属于该组的元素数组。

PHP数组合并去重算法提供了并行的解决方案,将原始数组分成小块并行处理,主进程合并块的结果去重。算法步骤:分割原始数组为均等分配的小块。并行处理每个块去重。合并块结果并再次去重。

PHP的array_group()函数可用于按指定键对数组进行分组,以查找重复元素。该函数通过以下步骤工作:使用key_callback指定分组键。可选地使用value_callback确定分组值。对分组元素进行计数并识别重复项。因此,array_group()函数对于查找和处理重复元素非常有用。
