2012-08-09 90 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]。如果元素不存在,它將刪除任何警告。