0
for ($k = 0; $k < $count; $k++) {
    $master[$k] = $namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k];
}

新しい配列を宣言し、すでに宣言されている他の配列から値を設定したいと思います。キーをループして値を設定するだけでよいと思いましたが、これはうまくいきません。

以下の完全なコード。イエローページの検索結果を解析し、検索結果をcsvファイルに出力しようとしています。以下のコードでは、ループを削除し、配列にいくつかの値を追加して、バグが他のものではないことを確認しました。

<?php

            // include required functions
            include('simple_html_dom.php');

            $url = "http://www.yellowpages.com/" . $_POST['city'] . '-' . $_POST['state'] . '-' . $_POST['postalcode'] . '/' . $_POST['category'] . '?g=' . $_POST['city'] . '%2C+' . $_POST['state'] . '+' . $_POST['postalcode'] . '&q=' . $_POST['category'];

            // get DOM from URL
            $html = file_get_html($url);


            // find all business name
            foreach($html->find('h3.business-name') as $name)
                //echo $name->innertext . '<br />';
                $namearray[] = $name->innertext;

            // find all business street address
            foreach($html->find('span.street-address') as $street) 
                //echo $street->innertext . '<br />';
                $streetarray[] = $street->innertext;

            // find all business city
            foreach($html->find('span.locality') as $locality)
                //echo $locality->innertext . '<br />';
                $localityarray[] = $locality->innertext;            

            // find all business state
            foreach($html->find('span.region') as $region)
                //echo $region->innertext . '<br />';
                $regionarray[] = $region->innertext;            

            // find all business postal code
            foreach($html->find('span.postal-code') as $postalcode)
                //echo $postalcode->innertext . '<br />';
                $postalcodearray[] = $postalcode->innertext;                

            // find all business phone
            foreach($html->find('span.business-phone') as $phone)
                //echo $phone->innertext . '<br />';
                $phonearray[] = $phone->innertext;

        ?>
        <p>Search results for: <?php echo $_POST['category'] . ' ' . $_POST['city'] . ' ' . $_POST['state'] . ' ' . $_POST['postalcode'];  ?></p>
        <?php
            // Output results
            $count = count($namearray);
            for ($i = 0; $i < $count; $i++) {
                echo $namearray[$i] . '<br />';
                echo $streetarray[$i] . '<br />';
                echo $localityarray[$i] . ',' . $regionarray[$i] . ' ' . $postalcodearray[$i] . '<br />';
                echo $phonearray[$i] . '<br />' . '<br />';
            }


        $list = array (
            array($namearray[0], $streetarray[0], $localityarray[0], $regionarray[0], $postalcodearray[0], $phonearray[0]),
            array($namearray[1], $streetarray[1], $localityarray[1], $regionarray[1], $postalcodearray[1], $phonearray[1]),
            array($namearray[2], $streetarray[2], $localityarray[2], $regionarray[2], $postalcodearray[2], $phonearray[2]),
            array($namearray[3], $streetarray[3], $localityarray[3], $regionarray[3], $postalcodearray[3], $phonearray[3])
        );

        $fp = fopen('hrpsearch.csv', 'w');

        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }

        fclose($fp);

        ?>
4

5 に答える 5

6

試す:

$master = array();
for ($k = 0; $k < $count; $k++) {
    $master[$k] = array
        ( $namearray[$k]
        , $streetarray[$k]
        , $localityarray[$k]
        , $regionarray[$k]
        , $postalcodearray[$k]
        , $phonearray[$k]
        );
}

これにより、すべての子配列に関連付けられたキーを持つ新しい 2 次元配列が作成されます。

于 2012-08-09T14:59:15.810 に答える
0

これを試して

for ($k = 0; $k < $count; $k++) {
    $master[$k] = array($namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k]);
}

または連想配列を作成する方が良い

for ($k = 0; $k < $count; $k++) {
    $master[$k] = array('name'=>$namearray[$k], 
                        'street'=>$streetarray[$k], 
                        'city'=>$localityarray[$k], 
                        'region'=>$regionarray[$k], 
                        'postalCode'=>$postalcodearray[$k], 
                        'phone'=>$phonearray[$k]);
}

また、配列要素が空でないかどうかを確認するか、「name」=> @ $ namearray[$k]のように@befor配列要素を配置する必要があります。要素が存在しない場合、警告は削除されます。

于 2012-08-09T15:01:19.807 に答える
0

多分あなたはこれを達成したいだけですか?

$master[$k] = array($namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k]);

代わりに使用することをお勧めします:

$master[$k]['name'] = $namearray[$k];
$master[$k]['street'] = $streetarray[$k];
...

データの取得がより読みやすくなります。

于 2012-08-09T14:59:20.943 に答える
0

@DaveRandomの答えは、あなたが探しているもの(つまり)だと思います。

PHP 配列は任意の型 (スカラー、配列、オブジェクトなど) になる可能性があるため、construct を使用して配列を割り当てることを伝える必要がありますarray()

最終結果は次のようになります。

$master[$k] = array($namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k]);
于 2012-08-09T15:00:15.153 に答える
0

試す

for($k = 0; $k < $count; $k++) {
    $master[$k] = array(
        $namearray[$k], 
        $streetarray[$k], 
        $localityarray[$k], 
        $regionarray[$k], 
        $postalcodearray[$k], 
        $phonearray[$k]
    );
}
于 2012-08-09T14:58:57.650 に答える