【问题标题】:Removing a key=>value pair from a 3D associative array - PHP从 3D 关联数组中删除 key=>value 对 - PHP
【发布时间】:2012-08-31 03:31:57
【问题描述】:

3D 关联。数组如下所示。

Array 
( 
    [COL] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 775.00 
                            [name] => COL 
                        ) 
                    [1] => Array 
                        ( 
                            [emp_num] => 26 
                            [user_name] => John Doe 
                            [amount] => 555.00 
                            [name] => COL 
                        ) 
                ) 
    [RA. 20%] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 110.00 
                            [name] => RA. 20% 
                        ) 
                ) 
    [BS] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 444.00 
                            [name] => BS 
                        ) 
                ) 
)  

我想删除每个最内层数组的最后一个 key=>value 对。 (想要删除键为 [name] 的键值对) 结果应该类似于下面的数组。

Array 
( 
    [COL] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 775.00
                        ) 
                    [1] => Array 
                        ( 
                            [emp_num] => 26 
                            [user_name] => John Doe 
                            [amount] => 555.00
                        ) 
                ) 
    [RA. 20%] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 110.00
                        ) 
                ) 
    [BS] => Array 
                ( 
                    [0] => Array 
                        ( 
                            [emp_num] => 1000001 
                            [user_name] => Test User 
                            [amount] => 444.00
                        ) 
                ) 
)   

我为此编写了一个函数。

<!-- language: php -->    
function remove_name_from_psa($psa_array){

            foreach( $psa_array as $key=>$value ) {
                foreach( $value as $key2=>$value2 ){
                    foreach( $value2 as $key3=>$value3 ){                    
                         if( $key3 != 'name') {
                            $psa_name_removed[$key][$value[$key2][$value2[$key3]]] = $value3;
                        }
                    }
                }
            }
            return $psa_name_removed;
        }  

返回的数组就是这个,显然不是我需要的。

Array ( [COST OF LIVING] => Array 
                   ( [] => 555.00 ) 
        [RENT ALLOW. 20%] => Array 
                   ( [] => 110.00 ) 
        [BASIC SALARY] => Array 
                   ( [] => 444.00 ) 
      )  

还有很多未定义的偏移量和未定义的索引通知。
$psa_name_removed[$key][$value[$key2][$value2[$key3]]] = $value3; //这是我做错的那一行吗?还是整个方法都是错误的? :-P
我怎样才能让它工作?谁能帮忙?
谢谢!

【问题讨论】:

    标签: php multidimensional-array foreach associative-array


    【解决方案1】:
    function remove_name_from_psa($psa_array){
    
        foreach( $psa_array as $key => $value ) {
            foreach( $value as $key2 => $value2 ){
                unset( $psa_array[$key][$key2]['name'] );
            }
        }
        return $psa_array;
    
    } 
    

    【讨论】:

    • 不需要isset。只是unset。完成。
    • 嗯,我没有意识到如果有问题的密钥不存在, unset 不会发出通知。也许我只是过于谨慎:p
    【解决方案2】:

    嘿,功能性解决方案!

    $array = array_map(function ($i) {
        return array_map(function ($j) {
            return array_diff_key($j, array_flip(array('name')));
        }, $i);
    }, $array);
    

    更传统的解决方案:

    foreach ($array as &$i) {
        foreach ($i as &$j) {
            unset($j['name']);
        }
    }
    

    注意as &amp;$i 中的&amp;。使用此参考来修改项目。

    【讨论】:

      【解决方案3】:
      foreach($array as &$foo){
          foreach($foo as &$bar){
              unset($bar['name']);
          }
      }
      

      【讨论】:

        【解决方案4】:

        要真正取消设置 3D 数组中的最后一个元素,您可以这样做:

        $data = array(
            array(
                array(1, 2, 3),
            ),
        );
        
        foreach ($data as $i1 => $j1) {
            foreach ($j1 as $i2 => $j2) {
                end($j2);
                unset($data[$i1][$i2][key($j2)]);
            }
        }
        var_dump($data);
        

        在这里查看它的实际效果:

        http://codepad.viper-7.com/CbgnVf

        【讨论】:

          【解决方案5】:
          function remove_name_from_psa( $psa_array ){
              foreach( $psa_array as $key => $value ) {
                  foreach( $value as $key2 => $value2 ) {
                      array_pop( $psa_array[$key][$key2] );
                  }
              }
              return $psa_array;
          }
          

          【讨论】:

            猜你喜欢
            • 2015-01-22
            • 2021-06-12
            • 2018-10-27
            • 1970-01-01
            • 2011-07-23
            • 2023-04-05
            • 2020-03-13
            • 1970-01-01
            • 2018-09-16
            相关资源
            最近更新 更多