File: /var/www/kevin-demo/wp-content/plugins/ajax-search-pro/src/server/Utils/ArrayUtils.php
<?php
namespace WPDRMS\ASP\Utils;
class ArrayUtils {
/**
* array_merge_recursive does indeed merge arrays, but it converts values with duplicate
* keys to arrays rather than overwriting the value in the first array with the duplicate
* value in the second array, as array_merge does. I.e., with array_merge_recursive,
* this happens (documented behavior):
*
* array_merge_recursive(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('org value', 'new value'));
*
* arrayMergeRecursiveDistinct does not change the datatypes of the values in the arrays.
* Matching keys' values in the second array overwrite those in the first array, as is the
* case with array_merge, i.e.:
*
* array_merge_recursive_distinct(array('key' => 'org value'), array('key' => 'new value'));
* => array('key' => array('new value'));
*
* @template T of Array<string, mixed>
* @param T $array1
* @param array $array2
* @return T
* @author Daniel <daniel (at) danielsmedegaardbuus (dot) dk>
* @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com>
*/
public static function arrayMergeRecursiveDistinct( array $array1, array $array2 ): array {
$merged = $array1;
foreach ( $array2 as $key => &$value ) {
if ( is_array( $value ) && isset( $merged [ $key ] ) && is_array( $merged [ $key ] ) ) {
$merged [ $key ] = self::arrayMergeRecursiveDistinct( $merged [ $key ], $value );
} else {
$merged [ $key ] = $value;
}
}
return $merged;
}
}