致命错误:调用CI控制器解决方案的未定义函数array_replace_recursive() [英] Fatal error: Call to undefined function array_replace_recursive() for CI Controller solution

查看:60
本文介绍了致命错误:调用CI控制器解决方案的未定义函数array_replace_recursive()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到错误


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

Fatal error: Call to undefined function array_replace_recursive()

因为我的php版本不够高。因此,我搜索了运行我当前PHP版本的 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.

我使用Codeigniter控制器。

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

        } 
?>


推荐答案

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

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

检查最上方答案:


很好的是,此功能最终发现它是在PHP内核中!如果还要在5.3.0之前的较早版本的PHP中使用它,则可以这样定义:

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




我在较旧的项目中称此函数为array_merge_recursive_overwrite(),但是array_replace_recursive ()在执行相同操作时听起来会更好。

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

如果您以前实现了这样的兼容功能,并且不想
重构所有代码,则您可以使用以下代码段
对其进行更新,以使用PHP 5.3.0的本机(且希望更快)的实现,如果可用,则使用
。只需使用以下几行开始您的函数:

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

这篇关于致命错误:调用CI控制器解决方案的未定义函数array_replace_recursive()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆