CMap :: mergeArray в Yii - PullRequest
       3

CMap :: mergeArray в Yii

2 голосов
/ 12 июля 2011

Я знаю, что CMap :: mergeArray в Yii объединяет два массива.Но у меня есть три массива, и я хочу, чтобы они слились через CMap :: mergeArray.Итак, как объединить все три массива в Yii Framework.

Ответы [ 2 ]

8 голосов
/ 13 июля 2011

Это зависит от того, что вы хотите.Ключевое отличие, которое следует отметить, заключается в том, что CMap перезапишет существующие ключи, что отличается от встроенных функций php:

Если в каждом массиве есть элемент с одинаковым значением строкового ключа, последний перезапишетпрежний (отличается от array_merge_recursive)

Если вы выполните CMap :: mergeWith, как описано выше, вы просто получите новый массив, состоящий из 3-х массивов в качестве подэлементов:

Например,с учетом следующей структуры:

$foo = array (
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'z' => 'does not exist in other arrays',
    );

$bar = array (
    'a' => 'one',
    'b' => 'two', 
    'c' => 'three',
);

$arr = array (
    'a' => 'uno',
    'b' => 'dos',
    'c' => 'tres',
);

Использование CMap :: mergeWith следующим образом:

$map = new CMap();
$map->mergeWith (array($foo, $bar, $arr));
print_r($map);

Результат в следующем:

CMap Object
(
    [_d:CMap:private] => Array
        (
            [0] => Array
                (
                    [a] => 1
                    [b] => 2
                    [c] => 3
                    [z] => does not exist in other arrays
                )

            [1] => Array
                (
                    [a] => one
                    [b] => two
                    [c] => three
                )

            [2] => Array
                (
                    [a] => uno
                    [b] => dos
                    [c] => tres
                )

        )

    [_r:CMap:private] => 
    [_e:CComponent:private] => 
    [_m:CComponent:private] => 
)

Если перезаписать элементыпредпочтительное поведение, тогда будет работать следующее:

$map = new CMap ($foo);
$map->mergeWith ($bar);
$map->mergeWith ($arr);
print_r($map);

Что приводит к:

CMap Object
(
    [_d:CMap:private] => Array
        (
            [a] => uno
            [b] => dos
            [c] => tres
            [z] => does not exist in other arrays
        )

    [_r:CMap:private] => 
    [_e:CComponent:private] => 
    [_m:CComponent:private] => 
)

Если, однако, вы хотите добавить данные, то:

$map = new CMap (array_merge_recursive ($foo, $bar, $arr));
print_r($map);

доставит вас туда:

CMap Object
(
    [_d:CMap:private] => Array
        (
            [a] => Array
                (
                    [0] => 1
                    [1] => one
                    [2] => uno
                )

            [b] => Array
                (
                    [0] => 2
                    [1] => two
                    [2] => dos
                )

            [c] => Array
                (
                    [0] => 3
                    [1] => three
                    [2] => tres
                )

            [z] => does not exist in other arrays
        )

    [_r:CMap:private] => 
    [_e:CComponent:private] => 
    [_m:CComponent:private] => 
)
1 голос
/ 12 июля 2011

Использование array_merge($ar1, $ar2, $ar3) ИЛИ array_merge_recursive($ar1, $ar2, $ar3)

Также вы можете использовать:

CMap::mergeWith(array($ar1, $ar2, $ar3));

Но я не уверен в результате прежнего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...