0

だから私はこの機能を持っています

function parse_records($html) {
    foreach($html->find('li.vcard') as $vcard):
        $table = array();  
        foreach($vcard->find('span.given-name') as $given_name):                    
            $table['given_name'] = (trim(addslashes($given_name->plaintext), " "));
        endforeach; 
        foreach($vcard->find('span.family-name') as $family_name):
            $table['family_name'] = (trim(addslashes($family_name->plaintext)," "));
        endforeach;
        foreach($vcard->find('span.location') as $location):
            $table['location'] = (trim(addslashes($location->plaintext), " "));
        endforeach;
        foreach($vcard->find('span.industry') as $industry):
            $table['industry'] = (trim(addslashes($industry->plaintext), " "));
        endforeach;
        foreach($vcard->find('dd.current-content') as $headline):
            $table['headline'] = (trim(addslashes($headline->plaintext), " "));
        endforeach;
        foreach($vcard->find('a.btn-primary') as $url):
            $table['url'] = addslashes($url->href);
        endforeach;
        return $table;
    endforeach;

私のメインファイルでは、このように使用しています。

$page = curl_request($fn, $ln);
$records = parse_records($page);
print_r($records);

ただし、1レコードのみです。渡されるレコード全体を渡すには、何を変更すればよいですか? 試してみまし(trim(addslashes($given_name->plaintext), " "))たが、役に立ちませんでした。

4

2 に答える 2

0

次のように配列を追加する必要があります。

function parse_records($html) {

    // Array to hold all records
    $table = array();  

    foreach($html->find('li.vcard') as $vcard):

        // New array for each record
        $row = array();

        foreach($vcard->find('span.given-name') as $given_name):                    
            $row['given_name'] = (trim(addslashes($given_name->plaintext), " "));
        endforeach; 
        foreach($vcard->find('span.family-name') as $family_name):
            $row['family_name'] = (trim(addslashes($family_name->plaintext)," "));
        endforeach;
        foreach($vcard->find('span.location') as $location):
            $row['location'] = (trim(addslashes($location->plaintext), " "));
        endforeach;
        foreach($vcard->find('span.industry') as $industry):
            $row['industry'] = (trim(addslashes($industry->plaintext), " "));
        endforeach;
        foreach($vcard->find('dd.current-content') as $headline):
            $row['headline'] = (trim(addslashes($headline->plaintext), " "));
        endforeach;
        foreach($vcard->find('a.btn-primary') as $url):
            $row['url'] = addslashes($url->href);
        endforeach;

        // Add row to table
        $table[] = $row;

    endforeach;

    // wait till the end to return the whole thing
    return $table;
}

重要な行は、各vcardforeachs が $row という配列を作成し、そのループの最後に、その行全体をテーブルに追加することです$table[] = $row;

于 2013-07-03T21:56:01.870 に答える
0

レコードが 1 つしか返されない理由は、次の行があるためですreturn $table;foreachこれは、コードがループ内のすべてのものを実行し、returnステートメントにヒットすると、関数からその値を返すことを意味します。つまり、関数からの実行を停止します。

each $tableから生成されたそれぞれのリスト$vcardが必要だとすると、次のようにする必要があります。

function parse_records($html)
{
    $tablesList = array();

    foreach($html->find("li.vcard") as $vcard)
    {
        $table = array();

        // Add keys to the table like you are doing.

        $tablesList[] = $table; // Add this table to the tables list.
    }

    // Return the list of all of the tables we produced.

    return $tablesList;
}

$tableこの場合、ループが生成する各配列を という配列に追加し、生成される$tablesList最初のテーブルだけでなく、テーブルのリスト全体を返し$tableます。

于 2013-07-03T21:57:14.677 に答える