我收到了错误
致命错误:调用未定义的函数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();
}
?>
答案 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());
}
?>