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 по мере удобства и необходимости.
Похожие статьи:
Комментарии
Добавить комментарий

admin



для рекурсивного объединения массивов в торте есть функция Set::merge http://api.cakephp.org/class/set#method-Setmerge
Есть, вот только для того же данного примера результат аналогичен функции am().