问题
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();
}
?>
回答1:
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());
}
?>
来源:https://stackoverflow.com/questions/33909381/fatal-error-call-to-undefined-function-array-replace-recursive-for-ci-control