방문한 페이지 대 방문한 페이지를 보여주는 HTML 표를 만들어야합니다./또는 foreach 루프를 사용하는 것이 klunky 인 것처럼 보이지만 나는 더 나은 것을 생각할 수 없습니다. 저는 PHP를 사용하고 있습니다. 그러나 이것은 언어에 무관심하다고 생각합니다.루프가 테이블을 만드는 가장 좋은 방법입니까?
답변
... 루프의 일종을 사용합니다. 당신이 불쾌한 코드없이 '순수'유지하려고 할 경우
그러나, 적어도 수행 할 수 있습니다
$tableformat = '<table><thead>%s</thead><tbody>%s</tbody></table>';
$rowformat = '<tr>%s</tr>';
$cellformat = '<td>%s</td>';
$hdata = '';
foreach($data[0] as $cellname => $cellvalue)
{
$hdata .= sprintf($cellformat, $cellname);
}
$hdata = sprintf($rowformat, $hdata);
$rdata = "";
foreach($data as $rownum => $rowvalue)
{
$row = "";
foreach($rowvalue as $colname => $colvalue)
{
$row .= sprintf($cellformat, $colvalue);
}
$rdata .= sprintf($rowformat,$row);
}
return sprintf($tableformat, $hdata, $rdata);
적어도 그런 식으로는 어느 정도 유지 관리 될 수 있습니다. 불완전한 문자열에 대해 걱정하지 않아도됩니다.
은 또한 오히려 간결하면서, 아마도 결국 뜨거운 물을 조금에서 당신을 얻을 것이다 어떤
$hdata = "<tr><td>" . implode("</td><td>", array_keys($data[0])) . "</td></tr>";
$rdata .= "<tr><td>" . implode("</td><td>", $rowvalue) . "</td></tr>";
와 그 코드의 일부를 subsitutue 수 있으며 재 코딩이 필요합니다. (내부적으로 내부적으로 루프가 실행되므로 내부 손실이 발생합니다). 당신이 추가 함수 호출의 오버 헤드를 괜찮다면
이 너무 많은 네거티브없이 더 간결한 코드를 만들 수있는 (그리고 여전히 루프를 실행) :
$tableformat = '<table><thead>%s</thead><tbody>%s</tbody></table>';
$rowformat = '<tr>%s</tr>';
$cellformat = '<td>%s</td>';
function tr($cells)
{
$o = "";
foreach($cells as $i => $v)
{
$o .= sprintf($cellformat, $v);
}
return sprintf($rowformat, $o);
}
return sprintf($tableformat,
tr(array_keys($data[0])),
implode("", array_map('tr', $data)));
을하지만 조심, 읽기 어려운 이잖아, 그리고 언젠가는 당신이 그것을 lisp로 깨울 것입니다.
글쎄, 여러 행이 있고 각 행에서 비슷한 형식의 데이터가있는 경우 루프를 사용하지 않는 테이블을 만드는 방법을 생각할 수 없습니다. 그 유형의 것은 기본적으로 어떤 루프가 만들어 졌는지입니다.
작성하려는 테이블에 대해 자세히 설명해 주시면 더 나은 방법을 공식화 할 수 있습니다.
다음 테이블의 데이터가 동적 인 경우 아마 훨씬 더 생각
당신의 코드에서 행과 열의 수를 하드 코딩 할 필요가 당신은 루프의 일부 종류의 사용하지 않는 경우 그럼 당신은 루프를 사용해야합니다. 테이블을 생성하는 구성 요소를 얻더라도 내부적으로 루프를 사용합니다.
"최상의"정의에 따라 다릅니다. FOR 루프는 잘 작동합니다. 저는 PHP 프로그래머가 아니지만, .NET에서는 테이블 HTML을 선언하는 데 사용할 수있는 일종의 템플릿 인 Repeater를 사용할 수 있습니다. 그것은 머리말, 꼬리말 및 각 품목을위한 템플렛이있다. 데이터 소스를 repeater에 바인드하면 FOR 루프를 사용하는 것보다 좀 더 우아하게 테이블 HTML이 생성됩니다. 나는 PHP에서 동등한 템플리트가 있다고 생각한다. 결국
는하지만, 심지어 리피터 구현, 그것은 여전히 기계 수준에서 일어날하지 않을 경우 루프를 방지하는 것은, 아마도 수 없습니다PHP 용 템플릿 엔진 Smarty을 적극 권장합니다. 이렇게하면 Smarty 구문을 사용하여 테이블 (및 피할 수없는 관련 루프)을 템플릿으로 옮길 수 있으므로 비즈니스 로직에서 더 명확하고 분리됩니다. 예제의 거의 모든 코드를 HTML 스 니펫의 몇 가지 간단한 태그로 바꿀 수 있습니다. Smarty 페이지에서 테이블 사용에 대한 예를 보려면 충돌 과정을 확인하십시오.
일반적으로 PHP에서는 루프와 implode
을 사용합니다. 기능적 프로그래밍을 지원하는 언어에서 나는 그것을 다르게 할 것이다.
function render_table($data) {
$html = '<table>';
$tr = array();
foreach (array_keys($data[0]) as $key) {
$tr[] = '<th>' . htmlspecialchars($key) . '</th>';
}
$html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>';
$tbody = array();
foreach ($data as $row) {
$tr = array();
foreach ($row as $value) {
$tr[] = '<td>' . htmlspecialchars($value) . '</td>';
}
$tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>';
}
$html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>';
$html .= '</table>';
return $html;
}
왜 루프를 방지 하시겠습니까? 항목 집합이 있고 각 항목을 표시하려는 경우 분명히 집합을 반복하면 확실한 해결책이 될 것입니다.
모델을보기와 분리하거나 가독성이 좋은 코드를 작성하려는 경우 유용합니다. 그러나 루프는 본질적으로 나쁘지 않습니다.
아니, 그들은 나쁘지 않다. 그러나 방대한 데이터 세트를 가지고 이상한 일을 할 때 루프는 코드를 읽을 수있게 만드는 데 도움이되지 않습니다. –
- 1. LINQ를 사용하여 빈도 테이블을 만드는 가장 좋은 방법입니까?
- 2. ORM으로 테이블을 만드는 가장 좋은 방법은 무엇입니까?
- 3. 이렇게하는 것이 가장 좋은 방법입니까?
- 4. 어느 것이 가장 좋은 방법입니까?
- 5. 프로세스 흐름 - 여전히 흐름도가 다이어그램을 만드는 가장 좋은 방법입니까?
- 6. 'SQL 사전'이이 문제를 해결하는 가장 좋은 방법입니까?
- 7. 사용자 상태를 업데이트하는 가장 좋은 방법입니까?
- 8. 문자열 헥스를 바이트로 변환하는 가장 좋은 방법입니까?
- 9. 왼쪽 열 머리글로 동적 테이블을 만드는 가장 좋은 방법
- 10. CSS에서 동적 테이블을 다시 만드는 가장 좋은 방법
- 11. C에서 비동기 이벤트를 만드는 가장 좋은 방법 #
- 12. 데이터베이스의 열거 형을 문서 형식으로 유지하는 것이 가장 좋은 방법입니까?
- 13. filter_var는 좋은 방법입니까?
- 14. UIViewController를 변경하는 좋은 방법입니까?
- 15. 컬렉션 모음이 가능합니까? 아니면 가장 좋은 방법입니까? C# .Net 3.5
- 16. 장고는 가장 효율적인 방법입니까?
- 17. ASP.NET MVC에서 보고서를 만드는 가장 좋은 방법
- 18. Ruby에서 테이블을 구문 분석하는 가장 좋은 방법
- 19. JDBC : 테이블을 업데이트하는 가장 좋은 방법은 무엇입니까?
- 20. Zend_Pdf로 테이블을 만드는 가장 쉬운 방법
- 21. 원격 테이블을 기반으로 테이블을 업데이트/삽입하는 가장 좋은 방법
- 22. 은 심비안 응용 프로그램을 만드는 더 좋은 방법입니까?
- 23. SQL에서 주석 테이블을 만드는 방법
- 24. 부분 실행을 통해 재귀를 수행하는 것이 가장 좋은 방법입니까?
- 25. JQuery 플러그인에서 CSS와 JavaScript 로직을 분리하는 것이 가장 좋은 방법입니까?
- 26. 모든 winforms 앱에서 MVP 패턴이 가장 좋은 방법입니까?
- 27. 집계 확장은이 문제를 해결하는 가장 좋은 방법입니까, 아니면 그룹화로 무언가를하려고해야합니까?
- 28. Google 앱 엔진의 remote_api가 데이터를 저장하는 가장 좋은 방법입니까?
- 29. SSE는 0.0과 1.0의 레지스터를 설정하는 가장 좋은 방법입니까?
- 30. CUPS를 통해 종이의 크기를 얻는 가장 좋은 방법입니까?
정말 좋아합니다. 그것들은 무작위 문자열을 가진 루프보다 훨씬 깔끔한 코드를 만듭니다. –
은 HTML 내에서 mangling 코드보다 (IMNSHO) PHP 코드 내에서 HTML을 mangle합니다. – Javier
PHP는 그대로 망가져 있습니다. 당신은 훨씬 더 악화시킬 수 없습니다. IMO. –