I am having problems with getting pgpoolAdmin up and running using apache – error logs suggest there is a problem in the smarty_internal_compilebase.php file – ‘Call to undefined function in each()…’
I have ready that each() is deprecated past PHP 7.2 and I have found a chunk of code in the .php file which referring to the each() function. I have no background/knowledge of PHP coding so please bear with me. The problem code snippet is as follows:
} else {
$kv = each($mixed);
As part of:
`public function getAttributes($compiler, $attributes)
{
$_indexed_attr = array();
// loop over attributes
foreach ($attributes as $key => $mixed) {
// shorthand ?
if (!is_array($mixed)) {
// option flag ?
if (in_array(trim($mixed, '\'"'), $this->option_flags)) {
$_indexed_attr[trim($mixed, '\'"')] = true;
// shorthand attribute ?
} else if (isset($this->shorttag_order[$key])) {
$_indexed_attr[$this->shorttag_order[$key]] = $mixed;
} else {
// too many shorthands
$compiler->trigger_template_error('too many shorthand attributes', $compiler->lex->taglineno);
}
// named attribute
} else {
$kv = each($mixed);
// option flag?
if (in_array($kv['key'], $this->option_flags)) {
if (is_bool($kv['value'])) {
$_indexed_attr[$kv['key']] = $kv['value'];
} else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
if (trim($kv['value']) == 'true') {
$_indexed_attr[$kv['key']] = true;
} else {
$_indexed_attr[$kv['key']] = false;
}
} else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
if ($kv['value'] == 1) {
$_indexed_attr[$kv['key']] = true;
} else {
$_indexed_attr[$kv['key']] = false;
}
} else {
$compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", $compiler->lex->taglineno);
}
// must be named attribute
} else {
reset($mixed);
$_indexed_attr[key($mixed)] = $mixed[key($mixed)];
}
}
}`
How can I change the $kv = each($mixed) so that it doesn’t include each()?
Thanks
>Solution :
To update the code snippet to work without the deprecated each() function in PHP 8.1, you can try the combination of key(), current(), and next() functions to iterate over the array.
else {
// Get the current key and value of the array
$kv = ['key' => key($mixed), 'value' => current($mixed)];
// Move forward to next array element
next($mixed);
// Continue with your other stuff
...
}