重复使用函数:如何执行此操作 - 使用数组

时间:2011-01-01 20:03:07

标签: php function dom document

首先,许多季节问候,祝大家新年快乐!祝你玩得愉快!!

以下代码是一个返回标签和值的解决方案 格式化的数组准备输入到mysql。非常好; - )

<?php

$dom = new DOMDocument();
@$dom->loadHTMLFile('http://schulen.bildung-rp.de/gehezu/startseite/einzelanzeige.html?tx_wfqbe_pi1%5buid%5d=60119');
$divElement = $dom->getElementById('wfqbeResults');

$innerHTML= '';
$children = $divElement->childNodes;
foreach ($children as $child) {
$innerHTML = $child->ownerDocument->saveXML( $child );

$doc = new DOMDocument();
$doc->loadHTML($innerHTML);
//$divElementNew = $dom->getElementsByTagName('td');
$divElementNew = $dom->getElementsByTagname('td');

    /*** the array to return ***/
    $out = array();
    foreach ($divElementNew as $item)
    {
        /*** add node value to the out array ***/
        $out[] = $item->nodeValue;
    }

echo '<pre>';
print_r($out);
echo '</pre>';

} 

?>

这段代码工作得非常好,并且它执行我打算多次调用的操作。因此将它包装在函数中是有意义的。我们可以将它命名为我们想要的任何东西 - 让我们将其命名为“multiload”。我尝试使用以下代码执行此操作 - 但这不会运行...我仍然不确定在哪里放置uid - 在函数内部或外部...

    <?php

    function multiload ($uid) {
    /*...*/
    //  $uid = '60119';

    $dom = new DOMDocument();

             $dom->loadHTMLFile('basic-url ' . $uid);


         }

    multiload ('60089');
    multiload ('60152');
    multiload ('60242');
    /*...*/

    $divElement = $dom->getElementById('wfqbeResults');

    $innerHTML= '';
    $children = $divElement->childNodes;
    foreach ($children as $child) {
    $innerHTML = $child->ownerDocument->saveXML( $child );

    $doc = new DOMDocument();
    $doc->loadHTML($innerHTML);
    //$divElementNew = $dom->getElementsByTagName('td');
    $divElementNew = $dom->getElementsByTagname('td');

        /*** the array to return ***/
        $out = array();
        foreach ($divElementNew as $item)
        {
            /*** add node value to the out array ***/
            $out[] = $item->nodeValue;
        }

    echo '<pre>';

print_r($out);
echo '</pre>';

}?>

在哪里放下以下行

multicall('60089');
multicall('60152');
multicall('60242');
/*...*/

这仍然是重复的,所以我们可以把数字放在一个数组中 - 我们不能! 然后我们可以遍历数组。

$numbers = array ('60089', '60152', '60242' /*...*/);
foreach ($numbers as $number) {
    doStuff($number);
}

但问题是 - 如何以及在哪里放置循环!?

任何人都可以给我一个起点......

顺便说一句 - 如果我必须更具描述性,我想解释更多 - 只是让我知道...... 解释更多

是没问题的

问候 零

更新:向我提供了很大的帮助我现在迈出了一大步

<?php

    function multiload ($uid) {
    /*...*/
    //  $uid = '60119';

    $dom = new DOMDocument();

             $dom->loadHTMLFile('basic-url ' . $uid);


         }

    multiload ('60089');
    multiload ('60152');
    multiload ('60242');
    /*...*/

    $divElement = $dom->getElementById('wfqbeResults');

    $innerHTML= '';
    $children = $divElement->childNodes;
    foreach ($children as $child) {
    $innerHTML = $child->ownerDocument->saveXML( $child );

    $doc = new DOMDocument();
    $doc->loadHTML($innerHTML);
    //$divElementNew = $dom->getElementsByTagName('td');
    $divElementNew = $dom->getElementsByTagname('td');

        /*** the array to return ***/
        $out = array();
        foreach ($divElementNew as $item)
        {
            /*** add node value to the out array ***/
            $out[] = $item->nodeValue;
        }

    echo '<pre>';

print_r($out);
echo '</pre>';

}

$numbers = array ('60089', '60152', '60242' /*...*/);
foreach ($numbers as $number) {
    multiload($number);
}

?>

我将代码添加到最后......现在我已经学到了很多东西。顺便说一下:我很高兴来到这里! 问候零 现在我尝试一下......

1 个答案:

答案 0 :(得分:1)

从函数定义外部调用函数。例如,您可以在函数的结束}之后直接放置它:

<?php

function multiload ($uid) {
    // function code
}

$numbers = array ('60089', '60152', '60242' /*...*/);
foreach ($numbers as $number) {
    multiload($number);
}

?>

从内部调用函数是有效的,但绝对不是你想要的。如果您有兴趣了解从内部调用函数时会发生什么,请阅读recursion。它可能是一种非常有用的技术,但不是这里。但在阅读递归之前,我建议您阅读一些关于编写this one等函数的教程。