PHP 数组声明

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11886206/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 02:23:01  来源:igfitidea点击:

PHP Array Declaration

phparraysloops

提问by user1587928

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

I'd like to declare a new array and set values from other arrays already declared. I thought I could just loop through the keys and set the values but this doesn't work for me.

我想声明一个新数组并从已经声明的其他数组中设置值。我以为我可以遍历键并设置值,但这对我不起作用。

Full code below. I'm parsing yellow pages search results and trying to output search results into a csv file. In the code below I removed the loop and only added a few values to the array to make sure my bug wasn't something else.

完整代码如下。我正在解析黄页搜索结果并尝试将搜索结果输出到 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);

        ?>

回答by Daniel Li

Try:

尝试:

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

This will create a new two-dimensional array for you with associated keys for every child array.

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

回答by Jill-Jênn Vie

Maybe do you just want to achieve this?

也许你只是想达到这个目标?

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

I would suggest using instead:

我建议改用:

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

The retrieval of the data will be more readable.

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

回答by rockerest

I think @DaveRandom's answer is what (I imply) you are looking for.

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

Since a PHP array can be of any type (scalar, array, object, etc.), you need to tell it you are assigning an array with the construct array().

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

The end result would be:

最终结果将是:

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

回答by Vahan

Try this

尝试这个

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

or is better to create associative array

或者更好地创建关联数组

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

You also need to check if your array elements are not empty or just put @ befor array element like 'name'=>@$namearray[$k]. It will remove any warning if element doesn't exist.

您还需要检查您的数组元素是否不为空,或者只是将@ 放在数组元素之前,例如 'name'=>@$namearray[$k]。如果元素不存在,它将删除任何警告。

回答by Matt

Try

尝试

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