2016-09-27 36 views
1

我需要从每个数组中取消设置[device_id]元素。 我试着递归。但我无法做到这一点。任何人都可以帮到这个。我试过这样。php嵌套数组与键未使用元素

foreach($tree as $key) { 
    foreach($key as $value => $k){ 
     if ($value == 'device_id'){ 
      unset($k['device_id']); 
     } 
    } 
} 

我有嵌套多维数组如下:

Array 
(
    [4] => Array 
     (
      [device_id] => 4 
      [device_parent_id] => 2 
      [device_ext] => 20122 
      [device_name] => section controller1 
      [username] => sectioncontroller1 
      [password] => 90714771f0abd448f208e1aff5b662fc 
      [device_macaddress] => 
      [device_ip] => 
      [device_desc] => 
      [admin_id] => 2 
      [children] => Array 
       (
        [5] => Array 
         (
          [device_id] => 5 
          [device_parent_id] => 4 
          [device_ext] => 20199 
          [device_name] => Emergency1 
          [username] => Emergency1 
          [password] => bb75df6eb4fdbf5753640a34674ecce1 
          [device_macaddress] => 
          [device_ip] => 
          [device_desc] => 
          [admin_id] => 2 
          [children] => Array 
           (
           ) 
         ) 
        [6] => Array 
         (
          [device_id] => 6 
          [device_parent_id] => 4 
          [device_ext] => 20111 
          [device_name] => HQ Phone 
          [username] => HQPhone 
          [password] => 2f89d97f24539dc50ddd8fc53667b194 
          [device_macaddress] => 
          [device_ip] => 
          [device_desc] => 
          [admin_id] => 2 
          [children] => Array 
           (
           ) 
         ) 
        [9] => Array 
         (
          [device_id] => 9 
          [device_parent_id] => 4 
          [device_ext] => 20144 
          [device_name] => Other controller1 
          [username] => Othercontroller1 
          [password] => 861426b485e2afd62ad0d914f524f23c 
          [device_macaddress] => 
          [device_ip] => 
          [device_desc] => 
          [admin_id] => 2 
          [children] => Array 
           (
            [10] => Array 
             (
              [device_id] => 10 
              [device_parent_id] => 9 
              [device_ext] => 30122 
              [device_name] => Way Station1 
              [username] => WayStation1 
              [password] => 085d397b0392d3a325216a716c757113 
              [device_macaddress] => 
              [device_ip] => 
              [device_desc] => 
              [admin_id] => 2 
              [children] => Array 
               (
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 

    [21] => Array 
     (
      [device_id] => 21 
      [device_parent_id] => 2 
      [device_ext] => 1123299 
      [device_name] => sectioncontroller99 
      [username] => sectioncontroller3 
      [password] => 73d25d443117f76c6fe6bd5a4679f458 
      [device_macaddress] => 124511251419 
      [device_ip] => 124.235.63.569 
      [device_desc] => test section9 
      [admin_id] => 0 
      [children] => Array 
       (
        [22] => Array 
         (
          [device_id] => 22 
          [device_parent_id] => 21 
          [device_ext] => 9999 
          [device_name] => emergancy 
          [username] => emergancy 
          [password] => c2bc24d3d41ad9ade0171c3d5d6f59c6 
          [device_macaddress] => 1245122 
          [device_ip] => 124.235.235 
          [device_desc] => sdfdf sdfsdf sdfsd 
          [admin_id] => 0 
          [children] => Array 
           (
           ) 
         ) 
       ) 
     ) 
); 
+0

你想取消什么? – aldrin27

+0

[device_id]来自每个数组和嵌套数组 – raavi

回答

1

你需要为这个递归函数。这应该工作:

function deleteDeviceId(&$tree) { 
    foreach ($tree as $k => &$item) { 
     unset($item['device_id']); 
     deleteDeviceId($item['children']); 
    } 
} 

deleteDeviceId($tree); 
+0

其工作很好。谢谢 – raavi

1

问题是,循环中的变量是独立变量,更改它们不会影响原始数组。

为了解决这个您可以:

  • 使用在$tree的完整路径有直接取消设置你的变量:
    unset($tree[$outer_key][$inner_key]);。您也需要在外部循环中使用密钥。
    请注意,您似乎在使用密钥并在您的foreach循环中错误地使用了值,但这只是名称...
  • 通过引用传递循环变量;当他们引用原始变量时,任何更改都会改变原始变量。