Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
170 views
in Technique[技术] by (71.8m points)

php - Fatal error: Call to undefined function array_replace_recursive() for CI Controller solution

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();

        } 
?>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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());
  }
?>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...