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

새 배열을 선언하고 이미 선언 된 다른 배열의 값을 설정하고 싶습니다. 나는 열쇠를 통해 반복하고 값을 설정할 수 있다고 생각했지만 이것은 나를 위해 작동하지 않습니다.PHP 배열 선언

전체 코드는 다음과 같습니다. 노란색 페이지 검색 결과를 파싱하고 검색 결과를 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); 

     ?> 
+2

만들고 싶은 배열과 현재 가지고있는 배열의 예를 제공해주십시오. 우리가 당신이 원하는 것을 모르는 경우, 우리가 당신을 도울 수 없습니다. * "이미 선언 된 다른 배열의 값 설정"*은 구체적이지 않습니다. 최종 결과에 대한 정보를 전달하지 않습니다. –

+0

'$ master [$ k] = 배열 ​​($ namearray [$ k], $ streetarray [$ k], ...);'? (누락 된'array()'선언에주의하십시오.) – DaveRandom

+0

자, 전체 코드를 제공했으나 얻고 자하는 결과를 사용하지 않았다는 것을 알았습니다. '$ list'를 동적으로 만들고 싶습니까? –

답변

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 차원 배열을 생성합니다.

+0

감사합니다. 이것은 나를 위해 일했다. 하하는 방금 $ master와 $ list를 사용하여 여러분에게 배열 이름을 바꾼 것을 깨달았습니다. 하하 ... 여기에 첫 번째 글. 다음에 더 잘 할거야. 모두 도움을 주셔서 감사합니다. – user1587928

+0

문제가 없습니다! 행운을 빕니다. –

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]와 같이 befor 배열 요소를 넣으십시오. 요소가 존재하지 않으면 경고를 제거합니다.