-1

i got an error

Fatal error: Call to undefined function array_replace_recursive()

because my php-version isn't high enough. So i search for solution or alternative for run array_replace_recursive() to my current PHP version.

I use the Codeigniter Controller.

Here my code i hope it helps.

<?php
        function paginator($options = array() ) {

            $keepLive = '';
            $sort   = (!is_null($this->input->get('sort', true)) ? $this->input->get('sort', true) : '');
            $order  = (!is_null($this->input->get('order', true)) ? $this->input->get('order', true) : '');
            $rows   = (!is_null($this->input->get('rows', true)) ? $this->input->get('rows', true) : '');
            $search     = (!is_null($this->input->get('search', true)) ? $this->input->get('search', true) : '');

            $appends = array();
            if($sort!='')   $keepLive .='&sort='.$sort;
            if($order!='')  $keepLive .='&order='.$order;
            if($rows!='')   $keepLive .='&rows='.$rows;
            if($search!='') $keepLive .='&search='.$search;

// here's my alternatives of array_replace_recursive(). 
// starts here...
    $options = array();

    $options1= array(
                'base_url' => site_url( $this->module ).'?'.$keepLive,
                'total_rows' => 0 ,
                'per_page' => $this->per_page
    );

    foreach($options1 as $key => $val) {
        $options[$key] = $val;
    }

    $toptions = $options;
    //end's here...

    /*          
            // so here's the array_replace_recursive() that i need to replace for alternatives.
            $toptions = array_replace_recursive( array(
                'base_url' => site_url( $this->module ).'?'.$keepLive,
                'total_rows' => 0 ,
                'per_page' => $this->per_page,
            ), $options ); 

            $this->pagination->initialize( $toptions );
     */

            $this->pagination->initialize( $toptions );

            return $this->pagination->create_links();

        } 
?>
toking
  • 1
  • 4
  • Err, so what is your question? – Keale Nov 25 '15 at 06:05
  • What version of php are you using? From the [manual](http://php.net/manual/en/function.array-replace-recursive.php) it seems like `array_replace_recursive()` is available from 5.3 and up, which in itself is a very old version of php – peanut Nov 25 '15 at 06:13

1 Answers1

0

If you are finding an alternative function to use in place of array_replace_recursive(), you should check this out: http://php.net/manual/en/function.array-replace-recursive.php

Check the topmost answer:

Nice that this function finally found its was to the PHP core! If you want to use it also with older PHP versions before 5.3.0, you can define it this way:

<?php
if (!function_exists('array_replace_recursive'))
{
  function array_replace_recursive($array, $array1)
  {
    function recurse($array, $array1)
    {
      foreach ($array1 as $key => $value)
      {
        // create new key in $array, if it is empty or not an array
        if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key])))
        {
          $array[$key] = array();
        }

        // overwrite the value in the base array
        if (is_array($value))
        {
          $value = recurse($array[$key], $value);
        }
        $array[$key] = $value;
      }
      return $array;
    }

    // handle the arguments, merge one by one
    $args = func_get_args();
    $array = $args[0];
    if (!is_array($array))
    {
      return $array;
    }
    for ($i = 1; $i < count($args); $i++)
    {
      if (is_array($args[$i]))
      {
        $array = recurse($array, $args[$i]);
      }
    }
    return $array;
  }
}
?>

I called this function array_merge_recursive_overwrite() in my older projects, but array_replace_recursive() sounds quite better while they do the same.

If you implemented such a compatible function before and don't want to refactor all your code, you can update it with the following snippet to use the native (and hopefully faster) implementation of PHP 5.3.0, if available. Just start your function with these lines:

<?php
  // as of PHP 5.3.0 array_replace_recursive() does the work for us
  if (function_exists('array_replace_recursive'))
  {
    return call_user_func_array('array_replace_recursive', func_get_args());
  }
?>
<?php
  // as of PHP 5.3.0 array_replace_recursive() does the work for us
  if (function_exists('array_replace_recursive'))
  {
    return call_user_func_array('array_replace_recursive', func_get_args());
  }
?>