致命错误:为CI控制器解决方案调用未定义函数array_replace_recursive()

时间:2015-11-25 05:54:52

标签: php codeigniter

我收到了错误

  

致命错误:调用未定义的函数array_replace_recursive()

因为我的php版本不够高。所以我搜索运行array_replace_recursive()的解决方案或替代方案到我当前的PHP版本。

我使用Codeigniter控制器。

这是我的代码,我希望它有所帮助。

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

        } 
?>

1 个答案:

答案 0 :(得分:0)

如果您要找到替代array_replace_recursive()的替代功能,则应该检查一下:http://php.net/manual/en/function.array-replace-recursive.php

检查最上面的答案:

  

很好,这个函数最终发现它是PHP核心!如果你想在5.3.0之前使用旧的PHP版本,你可以这样定义:

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

我在我的旧项目中调用了这个函数array_merge_recursive_overwrite(),但是当array_replace_recursive()执行相同的操作时听起来相当好。

     

如果您之前和之后都实现了这样的兼容功能   重构您的所有代码,您可以使用以下代码段更新它   使用PHP 5.3.0的原生(并希望更快)实现,   如果可供使用的话。只需使用以下行开始您的功能:

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