PHP数组声明

时间:2012-08-09 14:56:11

标签: php arrays loops

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);

        ?>

5 个答案:

答案 0 :(得分:6)

尝试:

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

这将为您创建一个新的二维数组,并为每个子数组创建关联键。

答案 1 :(得分:0)

尝试

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

答案 2 :(得分: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];
...

数据的检索将更具可读性。

答案 3 :(得分:0)

我认为@ DaveRandom的回答是(我暗示)你正在寻找的。

由于PHP数组可以是任何类型(标量,数组,对象等),因此您需要告诉它您正在使用构造array()分配数组。

最终结果将是:

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

答案 4 :(得分: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]);
}

您还需要检查数组元素是否为空或只是将@befor数组元素放入'name'=&gt; @ $ namearray [$ k]。如果元素不存在,它将删除任何警告。