2011-10-07 5 views
4

코드는 배열을 반복하고 사용자에 대한 모든보기를 표시합니다. 이제 상황이 바뀌었고 foreach 루프의 결과 하나만 표시하면됩니다. 어떻게해야합니까?foreach (PHP)에서 하나의 결과 만 얻는 방법

<table class="report_edits_table"> 
<thead> 
    <tr class="dates_row"> 
    <?php foreach($report['edits'] as $report_edit) : ?> 
    <td colspan="2" report_edit_id="<?php echo $report_edit['id'] ?>"><div class="date_container"> 
    <?php if($sf_user->hasCredential(Attribute::COACHING_EDIT_ACCESS)) : ?> 
     <span class="ui-icon ui-icon-trash">Remove</span> 
    <?php endif?> 
    <?php echo "View " . link_to($report_edit['created'], sprintf('coaching/viewReportEdit?reportedit=%s', $report_edit['id']), array('title' => 'View This Contact')) ?> </div></td> 
    <?php endforeach ?> 
    </tr> 
</thead> 
<tbody> 
    <?php foreach($report['edits_titles'] as $index => $title) : ?> 
    <tr class="coach_row"> 
    <?php for ($i=max(0, count($report['edits'])-2); $i<count($report['edits']); $i++) : $report_edit = $report['edits'][$i] ?> 
    <td class="name_column"><?php echo $title ?></td> 
    <td class="value_column"><?php echo $report_edit[$index] ?></td> 
    <?php endfor ?> 
    </tr> 
    <?php endforeach ?> 
</tbody> 

+0

위해 그것을 사용할 수 있습니다'(은'foreach는 밖으로 뛰어)' – jprofitt

답변

2

간단한 변환을위한 break 명령을 사용하여

<?php for ... ?> 
    ... stuff here ... 
    <?php break; ?> 
<?php endfor ... ?> 

더 나은 솔루션은 완전히 foreach을 제거하는 것입니다.

1

가장 간단한 방법은?

break을 foreach의 마지막 줄에 배치하십시오. 한번 실행하면 종료됩니다. (만큼 어느 요소에 중지 중요하지 않습니다).

보조 방법 : 당신은 그냥 검색하여 $report['edits'] 또는 $report['edits_titles']는, 요소 수 for 루프를 잃게하고, 참조하는 요소에 array_pop 또는 array_shift를 사용합니다. 예를 들어

: 방법

// 
// current 
// 
foreach ($report['edits'] as $report_edit) : 
    /* markup */ 
endforeach; 

// 
// modified version 
// 
$report_edit = array_shift($report['edits']); 
    /* markup */ 
3

  1. 액세스 문제의 배열 요소 논리/가져 무엇이든 직접
  2. 업데이트의 인덱스 만의 요소를 반환하는 배열을 생성 interest
  3. 단일 루프 후에 끝나는 for 루프를 사용하십시오.
  4. arr ay_filter 관심있는 요소를 얻기 위해 배열을
  5. foreach 루프가 끝날 때 중단하여 첫 번째 반복 후에 종료합니다.
  6. foreach 루프에서 인덱스를 조건부로 확인하고 인덱스가 관심있는 요소와 일치하면 출력 마크 업만 출력합니다.
  7. 그래서

에 난 그냥 코드 주위에 튀는 적은 데이터를 의미로 관심 (목록에 번호 2)의 배열 요소를 점점 (그리고 아마도 PHP 상자와 데이터베이스의 경우 사이에 권 해드립니다 SQL 서버에서 배열 채우기)

1

사용 <?php break ?>

4

<?php endforeach ?> 전에 그들의 나머지를 통해 루프를하지 않고 배열에서 첫 번째 요소를 잡아하려는 것 같은데.

PHP는 이와 같은 상황에 대해 일련의 기능을 제공합니다.

배열의 첫 번째 요소를 가져 오려면 reset() 함수를 사용하여 배열 포인터를 배열의 시작 부분에 배치 한 다음 current() 함수를 사용하여 포인터가보고있는 요소를 읽습니다.

그래서 코드는 다음과 같습니다

<?php 
reset($report['edits']); 
$report_edit = current($report['edits']); 
?> 

지금 당신이 $report_edits 작업 할 수 foreach() 루프를 사용하지 않고.

(당신이 reset() 전화를 건너 뛸 수 있도록 배열 포인터가 실제로 첫 번째 레코드에서 기본적으로 시작 않습니다,하지만하지 말아야 할 가장 좋은 방법입니다 그것이 당신없이 당신의 코드에서 다른 곳으로 변경되었을 수 있으므로 실현)

그 다음 레코드로 넘어가려면 next() 기능을 사용할 수 있습니다. 보시다시피 원하는 경우 이론적으로 이러한 함수를 사용하여 대체 유형의 foreach() 루프를 작성할 수 있습니다. 그 (것)들을 그 (것)들 그 (것)들을 사용하는 어떤 점도 없을 것입니다, 그러나 가능하다. 그러나 배열과 관련하여보다 세밀하게 제어 할 수 있으므로 사용자 상황에 편리합니다.

희망이 있습니다.

1
example :: 

<?php 
    foreach ($this->oFuelData AS $aFuelData) { 
    echo $aFuelData['vehicle']; 
    break;      
    } 
?> 
0

당신은 또한 당신이 뭘하려고하는지 정말 모르겠어요,하지만 당신은 항상`깰 수 기준

foreach($array as $element) { 
    if ($element === reset($array)) 
     echo $element; 

    if ($element === end($array)) 
     echo $element; 
    } 
관련 문제