Merges an array of settings arrays into a single settings array.
This function merges the items in the same way that
jQuery.extend(true, {}, $settings_items[0], $settings_items[1], ...)
would. This means integer indices are preserved just like string indices are, rather than re-indexed as is common in PHP array merging.
Example:
function module1_page_build(&$page) {
$page['#attached']['js'][] = array(
'type' => 'setting',
'data' => array(
'foo' => array(
'a',
'b',
'c',
),
),
);
}
function module2_page_build(&$page) {
$page['#attached']['js'][] = array(
'type' => 'setting',
'data' => array(
'foo' => array(
'd',
),
),
);
}
// When the page is rendered after the above code, and the browser runs the
// resulting <SCRIPT> tags, the value of drupalSettings.foo is
// ['d', 'b', 'c'], not ['a', 'b', 'c', 'd'].
By following jQuery.extend() merge logic rather than common PHP array merge logic, the following are ensured:
$settings_items: An array of settings arrays, as returned by:
$js = drupal_add_js();
$settings_items = $js['settings']['data'];
A merged $settings array, suitable for JSON encoding and returning to the browser.
function drupal_merge_js_settings($settings_items) {
return NestedArray::mergeDeepArray($settings_items, TRUE);
}