Skip to content

Instantly share code, notes, and snippets.

@razzul
Last active November 24, 2017 13:03
Show Gist options
  • Save razzul/b5d0e8e626073100145476829af2ce1c to your computer and use it in GitHub Desktop.
Save razzul/b5d0e8e626073100145476829af2ce1c to your computer and use it in GitHub Desktop.
array_merge_recursive issue in linux

array_merge_recursive issue

$final_errors = array(
    'codes' => array(),
    'messages' => array(),
    'details' => array(),
);

$errors = array(
    'codes' => array(
        '0' => '4000201001'
    ),
    'messages' => array(
        '4000201001' => array(
            '0' => 'Invalid Session Id.'
        )
    ),
    'details' => array(
        '4000201001' => array(
            '0' => array()
        )
    )
)
class ApiValidationHelper {

    /**
     * Method to merge array
     *
     * @param array $Arr1 array in which we need to merge
     * @param array $Arr2 array to be merge
     * @param string $level dimention levels codes|messages|details
     * @return array
     *
     * @author Rajul.Mondal
     * @since Oct 24, 2017
     */
    public static function mergeArrays($Arr1, $Arr2, $level = '')
    {
        foreach ($Arr2 as $key => $Value) {
            if ($key == 'codes' && is_array($Value)) {
                $codes         = ApiValidationHelper::MergeArrays($Arr1['codes'], $Arr2['codes'], 'codes');
                $Arr1['codes'] = $codes;
            } elseif ($key == 'messages' && is_array($Value)) {
                $messages         = ApiValidationHelper::MergeArrays($Arr1['messages'], $Arr2['messages'], 'messages');
                $Arr1['messages'] = $messages;
            } elseif ($key == 'details' && is_array($Value)) {
                $details         = ApiValidationHelper::MergeArrays($Arr1['details'], $Arr2['details'], 'details');
                $Arr1['details'] = $details;
            } elseif (array_key_exists($key, $Arr1) && is_array($Value)) {
                $inner = ApiValidationHelper::MergeArrays($Arr1[$key], $Arr2[$key], $level);
                if (isset($Arr1[$key])) {
                    $Arr1[$key][] = $inner;
                } else {
                    $Arr1[$key] = $inner;
                }
            } else {
                if ($level == 'codes' && isset($Arr1[$key])) {
                    $Arr1[] = $Value;
                } else {
                    $Arr1[$key] = $Value;
                }

            }
        }
        return $Arr1;
    }
$this->errors = ApiValidationHelper::mergeArrays($this->errors, $errors, '');
$this->errors['codes'] = array_unique($this->errors['codes']);

// Array
// (
//     [codes] => Array
//         (
//             [0] => 4000201001
//         )
//     [messages] => Array
//         (
//             [4000201001] => Array
//                 (
//                     [0] => Invalid Session Id.
//                 )
//         )
//     [details] => Array
//         (
//             [4000201001] => Array
//                 (
//                     [0] => Array
//                         (
//                         )
//                 )
//         )
// )

*To resolve this issue in linux env use: * array_replace_recursive

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment