июля
12

CakePHP – объединение массивов

Author admin    Category CakePHP     Tags ,

CakePHP – объединение массивов

Работа с массивами – одна из основных в программировании, какого бы языка это не касалось (конечно, если речь о языках высокого уровня).

Извлекая данные из базы, получая массив в результате парсинга или как результат работы различных PHP методов – в том или ином случае программист сталкивается с тем, что ему необходимо объединить массивы. Причем структура их может существенно отличаться.

Для объединения массивов в CakePHP существует встроенная функция am().

Синтаксис функции предельно простой:

1
am(array $one, $two, $three...)

Пример использования функции объединения массивов в CakePHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
$arry1 = array(
        array(
             'id' => '48c2570e-dfa8',
             'name' => 'mysql workshop-08',
             'description' => 'Importing an sql dump'
             ),
         array(
             'id' => '48c257a8-cf7c-4af2',
             'name' => 'pbpaste | pbcopy',
             'description' => 'Remove all lines',
         )
    );
$arry2 = 4;
$arry3 = array(0=>"test array", "cats"=>"dogs", "people" => 1267);

pr(am($arry1,$arry2,$arry3,$arry4));

/* Результат */

Array
(
    [0] => Array
        (
            [id] => 48c2570e-dfa8
            [name] => mysql workshop-08
            [description] => Importing an sql dump
        )

    [1] => Array
        (
            [id] => 48c257a8-cf7c-4af2
            [name] => pbpaste | pbcopy
            [description] => Remove all lines
        )

    [2] => 4
    [3] => test array
    [cats] => felines
    [people] => 1267
    [dog] => angry
)

Как видим из примера, в качестве аргумента можно использовать не только массивы, но и, например, целые значения – массив #arry2.

Но как быть в том случае, если в массивах используются одинаковые ключи-слова? Например:

1
2
3
4
5
6
7
8
9
10
11
12
13
$arry1 = array("cats"=>"dogs", "people" => 1267);
$arry2 = array("cats"=>"felines", "dog"=>"angry");
                       
pr(am($arry1,$arry2));

/* Результат */

Array
(
    [cats] => felines
    [people] => 1267
    [dog] => angry
)

По ключу “cats” осталось только значение из последнего массива – felines.

Для того, чтобы объединить все значения с одинаковым ключом, можно описать следующую функцию (например, в файле bootstrap.php).

1
2
3
4
5
6
7
8
9
10
11
function amr() {
    $r = array();
    $args = func_get_args();
    foreach ($args as $a) {
        if (!is_array($a)) {
            $a = array($a);
        }
        $r = array_merge_recursive($r, $a);
    }
    return $r;
}

Рекурсивно пройдясь по всем входным массивам, мы получим на выходе следующее:

1
2
3
4
5
6
7
8
9
10
Array
(
    [cats] => Array
        (
            [0] => dogs
            [1] => felines
        )
    [people] => 1267
    [dog] => angry
)

Что и требовалось. Так что применяйте данные функции объединения массивов в CakePHP по мере удобства и необходимости.


Похожие статьи:

Комментарии

Добавить комментарий

Перед отправкой формы:
Human test by Not Captcha