1

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
どうすればこれを機能させることができますか?誰か助けてもらえますか?
ありがとう!

4

5 に答える 5

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

} 
于 2012-09-06T10:34:44.380 に答える
1

ウィー、機能的な解決策!

$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。この参照を使用して、アイテムを変更します。

于 2012-09-06T10:29:26.590 に答える
0
foreach($array as &$foo){
    foreach($foo as &$bar){
        unset($bar['name']);
    }
}
于 2012-09-06T10:29:30.083 に答える
0

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

于 2012-09-06T10:34:34.247 に答える
0
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;
}
于 2012-09-06T11:17:47.027 に答える