2014-06-18 5 views
0

simple_html_dom과 PHP를 사용하여 이름/작업/주소 형식의 페이지에서 레코드를 선택하려고합니다. 문제는 모든 레코드가 '직업'에 대한 가치를 저장하지 않는다는 것입니다. 페이지는 10 개 개의 레코드를 가지고 말해, 나는 다음과 같은 것을 사용하는 경우에만이 그 다음, 사람의 일을 기록합니다simple_html_dom과 일치하지 않는 레코드

foreach($html->find('span[class="name"]') as $e) { 
    $name[]=$e->innertext; 
} 

foreach($html->find('span[class="job"]') as $e) { 
    $job[]=$e->innertext; 
} 

foreach($html->find('span[class="address"]') as $e) { 
    $address[]=$e->innertext; 
} 

나는 $ 작업 배열이 아니라 내가 찾을 세 배열에 액세스 할 올 때 다음 2 개의 레코드가 길고, 이름과 주소는 10 길다. 그래서 나는 그 2 개의 직업이 속한 이름이 10 개 중 어느 것인지를 모른다. 배열을 서로 '단계적으로'유지하는 방법 또는 여기에 일관성있게 기록을 유지하는 다른 방법이 있습니까?

감사합니다.

답변

1

그러면 작업 노드가 비어있을 때 null 값을 삽입하십시오 !!

foreach($html->find('span[class="job"]') as $e) { 
    $value=$e->innertext; 

    if (empty($value)) 
     $job[] = null; 
    else 
     $job[] = $value; 
} 

또는 속기 경우 - 다른 버전 $job[] = (empty($value) ? null : $value);

+0

감사 Enissay를 사용하여. 당신의 대답은 좋은 것이지만, 실제로 이러한 진술은 각 레코드에 대해 한 번씩 돌아 다니는 루프 사이클에 있습니다. 즉, 이전 반복에서 $ 값이 설정됩니다. 각 사용 후에는 null로 처리 할 수 ​​있으며 로터리 방식으로 처리 할 수 ​​있습니다. 우리가 foreach에 들어갔다가 exit시 즉시 테스트되고, 참이면 $ job []에 ""를 할당하면 $ 플래그를 설정합니다. 그런 다음 $ 플래그를 false로 설정하고 다음 필드를 살펴 봅니다. 당신의 대답은 우아하지만 사용 후에는 모든 $ 값을 지우고 나면 내 것처럼 엉망이 될 것이라고 생각합니다. – Frankie

+0

일부 레코드의 html 코드를 게시하면 어쩌면 단순화하는 방법이 있습니다. – Enissay

+0

안녕하세요 @Enissay. 나는 그것이 어디에 있는지에 행복하다고 생각한다. 제대로 작동하면 일회성 사용이 될 것이므로 코드 유지에 대해 걱정할 필요가 없습니다. 따라서 코드의 약간의 어색함은 필연적이며 내 필요에 비례합니다. 협조 해 주셔서 감사합니다. 귀하의 답변을 수락 한 것으로 표시하고 싶습니다. 쓴 날짜를 알고 있기 때문에 괜찮습니다! Enissay 고마워. – Frankie