Слияние двух экземпляров Zend_Config_Ini перезаписывает массивы, определенные в первом объекте - PullRequest
2 голосов
/ 02 марта 2012

Имеется два * .ini файла:

one.ini

[production]
someArray[] = 'one'
someArray[] = 'two'
someArray[] = 'three'

[development : production]

two.ini

[production]
someArray[] = 'four'

[development : production]

Загрузка обоих файлов * .ini как экземпляров Zend_Config_Ini

$one = new Zend_Config_Ini(
    APPLICATION_PATH . "/configs/one.ini",
    APPLICATION_ENV,
    array('allowModifications' => true)
);

$two = new Zend_Config_Ini(
    APPLICATION_PATH . "/configs/two.ini",
    APPLICATION_ENV,
    array('allowModifications' => true)
);

$one->merge($two);
print_r($one->toArray());

Вывод после слияния:

Array
(
    [someArray] => Array
        (
            [0] => four
            [1] => two
            [2] => three
        )

)

Возможно ли объединить массивы так, чтобы выходные данные были такими же, как в примере ниже?

Я знаю, что это можно сделать, определив числовые индексы для массивов в каждом файле * .ini, но я бы хотел этого избежать, если это возможно.

//Ideal merge results

Array
(
    [someArray] => Array
        (
            [0] => one
            [1] => two
            [2] => three
            [3] => four
        )

)

Ответы [ 2 ]

1 голос
/ 02 марта 2012
$new = new Zend_Config(array_merge_recursive($one->toArray(), $two->toArray()));
var_dump($new->toArray());

Это должно сделать это.

0 голосов
/ 02 марта 2012

Вы можете сделать одно из этих двух решений:

$config = new Zend_Config($two->asArray() + $one->asArray()); 
var_dump($config->asArray()); 

или

$config = new Zend_Config(array_merge($one->asArray(),  $two->asArray()));  

var_dump($config->asArray()); 
...