Повторное использование функции: как это сделать - с массивом - PullRequest
2 голосов
/ 01 января 2011

Прежде всего, всем вам сезонных поздравлений и счастливого Нового года! Отлично провести время !!

Следующий код представляет собой решение, которое возвращает метки и значения в отформатированный массив готов для ввода в MySQL. Очень приятно; -)

<code><?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 '
'; } ?>

Этот бит кода работает очень хорошо, и он выполняет операцию, которую я собираюсь вызвать несколько раз. Поэтому имеет смысл обернуть его в функцию. Мы можем назвать его как угодно. Давайте просто назовем его «мультизагрузка». Я пытался сделать это с помощью следующего кода - но он не запускается ... Я до сих пор не уверен, где поставить UID - внутри или снаружи функции ...

<code>    <?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 '
'; }?>

Где поставить следующие строки

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

Это все еще повторяется, поэтому мы можем поместить числа в массив - не можем ли мы! Затем мы можем перебрать массив.

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

Но вопрос - как и где поставить петлю !?

Кто-нибудь может дать мне отправную точку ...

Кстати - если мне нужно быть более наглядным, я пытаюсь объяснить больше - просто дайте мне знать ... это не проблема, чтобы объяснить больше

привет Ноль

ОБНОВЛЕНИЕ: большое спасибо, теперь я сделал большой шаг

<code><?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 '
'; } $ numbers = array ('60089', '60152', '60242' /*...*/); foreach ($ числа как $ число) { Multiload ($ число); } ?>

я добавляю код в конец .... Теперь я многому научился. Кстати: я очень рад быть здесь !!! Привет ноль Теперь я попробую ...

1 Ответ

1 голос
/ 01 января 2011

Вызовите функцию за пределами определения функции.Например, вы можете поместить его непосредственно после закрытия } функции:

<?php

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

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

?>

Вызов функции изнутри сам по себе действителен, но определенно не тот, который вы желаете.Читайте recursion , если вам интересно узнать, что происходит, когда вы вызываете функцию изнутри себя.Это может быть очень полезная техника, но не здесь.Но перед тем, как читать рекурсию, я предлагаю вам прочитать некоторые учебные пособия по написанию таких функций, как this .

...