欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求教,多维数组处理

程序员文章站 2024-04-03 23:35:58
...
各位大神,我有一个多维数组,结构如下

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' => '',  ),)

我写的代码,比你多了好多行,?死了,结贴,给分。。。