1

1 つのマスター配列と複数のスレーブ配列があり、同じ配列キーの値を置き換える関数が必要です。

例:

マスター配列:

$master = array(**"a"=>"master a"**,**"b"=>"master b"** "c"=>"master c");

スレーブ アレイ:

$slave_a = array("s1"=>array(**"a"=>"slave a"**,"f"=>"slave f"));
$slave_b = array("s2"=>"slave" **"b"="slave b"**);

スレーブ配列を次のようにフィルタリングする関数が必要です。

$slave_a to be array("s1"=>array(**"a"=>"master a"**,"f"=>"slave f"));
$slave_b to be array("s2"=>"slave" **"b"="master b"**);

事前に感謝し、英語が下手で申し訳ありません

4

1 に答える 1

1

OK、使用してiniファイルを解析した後、これにparse_ini_file似た配列になるはずです(プロセスセクションTRUEを使用する場合):

$first_ini = array(
    'MAIN' => array(
        'lib' => 'lib_folder',
        'bin' => 'bin_folder',
        'usr' => 'usr_folder',
        'etc' => 'etc_folder'
    )
);

$second_ini = array(
    'alib' => 1,
    'abin' => 0,
    'ausr_other' => 'usr/tree'
);

$master_ini = array(
    'lib' => 'lib_other',
    'abin' => 1
);

次に、この単純な関数を使用できます(テストされていません):

function combine_master_with_slave($master, $slave) {
    foreach($slave as $key => $val) { // we will loop through slave array
        if(is_array($val)) { // if the value is an array use recursion
            $slave[$key] = combine_master_with_slave($master, $val);
        }
        if(isset($master[$key])) { // if master array contains the same key as a slave array, replace it's value by the master's one
            $slave[$key] = $master[$key];
        }
    }
    return $slave; // finaly return the processed slave array
}

しかし、これが機能するかどうかはわかりません。おそらく、わずかな変更が必要になるでしょう...

また、この関数をスレーブ配列の数だけ呼び出す必要があります。つまり、スレーブ配列ごとにこの関数を呼び出す必要があります。

これは、[ [ [ [ [ [][][][] ] ] ] であっても、どのサブアレイ レベルでも機能するはずです。

于 2012-05-04T11:36:11.537 に答える