2016-09-27 11 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ループでkeyとvalueを間違った方法で使用しているようですが、それはちょうど名前です...
  • ループ変数を参照渡しします。元の変数を参照するときは、元の変数の変更も同様に変更されます。
関連する問題