删除密钥=>;来自三维关联数组的值对-PHP


Removing a key=>value pair from a 3D associative array - PHP

三维关联数组如下所示。

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。(要删除键具有[名称]的键值对)结果应该像下面的数组。

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
我怎样才能让它发挥作用?有人能帮忙吗
非常感谢。

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;
} 

Wee,功能解决方案!

$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 &$i中的&。使用此引用来修改项目。

foreach($array as &$foo){
    foreach($foo as &$bar){
        unset($bar['name']);
    }
}

要真正取消设置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

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;
}