致命错误:无法重新声明功能

时间:2015-04-21 22:43:51

标签: php function

我有一个问题,有这个功能。

如何解决这个问题?


我的代码:

// Buscar Tema
$guardardato = array();

foreach($html->find('table', 2)->find('tr') as $datossc) {
    $title = $datossc->find('td', 1)->plaintext;
    if ($title != 'Song Title') {

        $guardardato[0] = $title;

        $guardardato[0] = preg_replace( "(-)", " - ", $guardardato[0]);
        $guardardato[0] = preg_replace( "(:)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([0-9]+)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(Current Song)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(pista)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(pista)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.com.ar)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.com)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.net)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.com.ar)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.com)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.net)", "", $guardardato[0]);
        $guardardato[0] = ucwords(strtolower($guardardato[0]));

        function obtener($guardardato) {
            foreach ($guardardato as $k => $v){
                return $v;
            }
        }
        print obtener($guardardato);
    }
}

错误:

  

致命错误:无法在 C:\ xampp \ htdocs中重新声明obtener()(之前在C:\ xampp \ htdocs ... \ index.php:43中声明)。 。\ index.php 43


第43行:

function obtener($guardardato) {

我尝试使用this posible solution,但这确实有用。

可以帮帮我吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您的函数定义(function obtener($guardardato))嵌套在foreach循环内部,因此每次循环遍历数组中的项时,它将尝试重新定义函数obtener。< / p>

要解决此问题,只需将您的函数移到foreach循环之外,如下所示:

function obtener($guardardato) {
    foreach ($guardardato as $k => $v){
        return $v;
    }
}

// Buscar Tema
$guardardato = array();

foreach($html->find('table', 2)->find('tr') as $datossc) {
    $title = $datossc->find('td', 1)->plaintext;
    if ($title != 'Song Title') {

        $guardardato[0] = $title;

        $guardardato[0] = preg_replace( "(-)", " - ", $guardardato[0]);
        $guardardato[0] = preg_replace( "(:)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([0-9]+)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(Current Song)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(pista)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(pista)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.com.ar)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.com)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "(www.[a-z]+.net)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.com.ar)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.com)", "", $guardardato[0]);
        $guardardato[0] = preg_replace( "([a-z]+.net)", "", $guardardato[0]);
        $guardardato[0] = ucwords(strtolower($guardardato[0]));

        print obtener($guardardato);
    }
}

答案 1 :(得分:0)

错误消息表明obtener()已经是代码中其他地方定义的函数。如果您将该函数重命名为obtener_tema()并更改其余代码以引用该函数,那是否可以解决您的问题?