2012-08-09 97 views
0
for ($k = 0; $k < $count; $k++) { 
    $master[$k] = $namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k]; 
} 

我想声明一个新的数组并设置其他已经声明的数组的值。我以为我可以通过键循环,并设置值,但这不适合我。PHP阵列声明

下面的完整代码。我正在解析黄页搜索结果,并试图将搜索结果输出到csv文件中。在下面的代码中,我删除了循环,只向数组添加了一些值,以确保我的bug不是别的。

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

     ?> 
+2

请提供您想要创建的数组和您当前拥有的数组的示例。如果我们不知道你想达到什么,我们很难帮助你。 *“已经声明的其他数组的设置值”*不够具体,它没有传达任何有关最终结果的信息。 – 2012-08-09 14:56:55

+0

'$ master [$ k] = array($ namearray [$ k],$ streetarray [$ k],...);'? (注意你缺少'array()'声明) – DaveRandom 2012-08-09 14:57:34

+0

好的,你提供了完整的代码,但是你还是没有告诉你想要得到什么结果。你想动态创建'$ list'吗? – 2012-08-09 15:05:32

回答

6

尝试:

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

这将为你的每一个孩子阵列相关的密钥一个新的二维数组。

+0

谢谢朋友。这对我有效。哈哈刚刚意识到我改变了我的阵列命名你们与$主和$列表。哈哈......第一篇文章在这里。我下次会做得更好。感谢大家的帮助。 – user1587928 2012-08-09 15:14:55

+0

没问题!祝你好运。 – 2012-08-09 15:19:19

0

尝试

for($k = 0; $k < $count; $k++) { 
    $master[$k] = array(
     $namearray[$k], 
     $streetarray[$k], 
     $localityarray[$k], 
     $regionarray[$k], 
     $postalcodearray[$k], 
     $phonearray[$k] 
    ); 
} 
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]; 
... 

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

0

我认为@ DaveRandom的回答是你正在寻找的东西(我暗示)。由于PHP数组可以是任何类型(标量,数组,对象等),因此您需要告诉它您正在为构造array()分配数组。

最终的结果将是:

$master[$k] = array($namearray[$k], $streetarray[$k], $localityarray[$k], $regionarray[$k], $postalcodearray[$k], $phonearray[$k]); 
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]。如果元素不存在,它将删除任何警告。