【发布时间】:2021-10-23 07:37:34
【问题描述】:
我想使用 php foreach 或 for 循环在数组数据的 html 表中显示结果。我在下面放置了数组。在数组中有字段'bs_column',它的值可以是12、6或4。在循环中,如果bs_column等于12和两个,我想在每个tr(每行一列)中显示一个td td 在每个 tr(每行两列)如果 bs_column==6 和三个 td 在每个 tr(每行三列)如果 bs_column==4。
如果未配对 bs_column==6 这是循环序列中的两个字段(<tr><td>field one</td><td>field two</td></tr>),则需要一行中的一列(<tr><td>single field</td></tr>)。
如果没有配对 bs_column==4 这是循环序列中的三个字段 (<tr><td>field one</td><td>field two</td><td>field three</td></tr>),则将两个字段 (<tr><td>field one</td><td>field two</td></tr>) 配对,如果不配对,则在行中的列中制作单个字段 (<tr><td>single field</td></tr>)。
数组是
$fields= Array ( [0] => Array ( [id] => 1 [form_id] => 3 [name] => THE APPLICANT [slug] => customers_the-applicant_heading [required] => 0 [type] => heading [options] => [field_order] => 0 [bs_column] => 12 ) [1] => Array ( [id] => 2 [form_id] => 3 [name] => Applicant(s) Name [slug] => customers_applicants-name_input [required] => 0 [type] => input [options] => [field_order] => 1 [bs_column] => 12 ) [2] => Array ( [id] => 3 [form_id] => 3 [name] => Email [slug] => customers_email_input [required] => 0 [type] => input [options] => [field_order] => 2 [bs_column] => 6 ) [3] => Array ( [id] => 4 [form_id] => 3 [name] => Telephone [slug] => customers_telephone_input [required] => 0 [type] => input [options] => [field_order] => 3 [bs_column] => 6 ) [4] => Array ( [id] => 5 [form_id] => 3 [name] => s this Property currently insured? [slug] => customers_s-this-property-currently-insured_checkbox [required] => 0 [type] => select [options] => Yes,No [field_order] => 4 [bs_column] => 12 ) [5] => Array ( [id] => 6 [form_id] => 3 [name] => Name of insurer(s) [slug] => customers_name-of-insurers_input [required] => 0 [type] => input [options] => [field_order] => 5 [bs_column] => 6 ) [6] => Array ( [id] => 7 [form_id] => 3 [name] => Current insurer expiry date [slug] => customers_current-insurer-expiry-date_date_picker [required] => 0 [type] => date_picker [options] => [field_order] => 6 [bs_column] => 6 ) [7] => Array ( [id] => 8 [form_id] => 3 [name] => D.O.B. of eldest insured [slug] => customers_dob-of-eldest-insured_date_picker [required] => 0 [type] => date_picker [options] => [field_order] => 7 [bs_column] => 6 ) [8] => Array ( [id] => 9 [form_id] => 3 [name] => Applicant postal address [slug] => customers_applicant-postal-address_input [required] => 0 [type] => textarea [options] => [field_order] => 8 [bs_column] => 12 ) [9] => Array ( [id] => 10 [form_id] => 3 [name] => Suburb [slug] => customers_suburb_input [required] => 0 [type] => input [options] => [field_order] => 9 [bs_column] => 4 ) [10] => Array ( [id] => 11 [form_id] => 3 [name] => State [slug] => customers_state_input [required] => 0 [type] => input [options] => [field_order] => 10 [bs_column] => 4 ) [11] => Array ( [id] => 12 [form_id] => 3 [name] => Postcode [slug] => customers_postcode_input [required] => 0 [type] => input [options] => [field_order] => 11 [bs_column] => 4 ) [12] => Array ( [id] => 13 [form_id] => 3 [name] => PERIOD OF INSURANCE [slug] => customers_period-of-insurance_heading [required] => 0 [type] => heading [options] => [field_order] => 12 [bs_column] => 12 ) [13] => Array ( [id] => 14 [form_id] => 3 [name] => Cover required From [slug] => customers_cover-required-from_input [required] => 0 [type] => input [options] => [field_order] => 13 [bs_column] => 6 ) [14] => Array ( [id] => 15 [form_id] => 3 [name] => Cover required to [slug] => customers_cover-required-to_input [required] => 0 [type] => input [options] => [field_order] => 14 [bs_column] => 6 ) [15] => Array ( [id] => 16 [form_id] => 3 [name] => INSURED DETAILS [slug] => customers_insured-details_heading [required] => 0 [type] => heading [options] => [field_order] => 15 [bs_column] => 12 ) [16] => Array ( [id] => 17 [form_id] => 3 [name] => What are the premises you wish to insure? [slug] => customers_what-are-the-premises-you-wish-to-insure-_note [required] => 0 [type] => note [options] => [field_order] => 16 [bs_column] => 12 ) [17] => Array ( [id] => 18 [form_id] => 3 [name] => Address of property [slug] => customers_address-of-property_input [required] => 0 [type] => input [options] => [field_order] => 17 [bs_column] => 12 ) [18] => Array ( [id] => 19 [form_id] => 3 [name] => CONSTRUCTION DETAILS [slug] => customers_construction-details_heading [required] => 0 [type] => heading [options] => [field_order] => 21 [bs_column] => 12 ) [19] => Array ( [id] => 20 [form_id] => 3 [name] => Cover type required [slug] => customers_cover-type-required_checkbox [required] => 0 [type] => checkbox [options] => Specified events,Accidental damage (specified events + accidental damage) [field_order] => 22 [bs_column] => 12 ) [20] => Array ( [id] => 23 [form_id] => 3 [name] => Year built [slug] => customers_year-built_date_picker [required] => 0 [type] => date_picker [options] => [field_order] => 25 [bs_column] => 6 ) [21] => Array ( [id] => 24 [form_id] => 3 [name] => Number of storeys [slug] => customers_number-of-storeys_input [required] => 0 [type] => input [options] => [field_order] => 26 [bs_column] => 6 ) [22] => Array ( [id] => 25 [form_id] => 3 [name] => Is the building elevated or multi storey? [slug] => customers_is-the-building-elevated-or-multi-storey_checkbox [required] => 0 [type] => checkbox [options] => Single storey,Single storey elevated,Double storey,Three or more storey [field_order] => 27 [bs_column] => 12 ) [23] => Array ( [id] => 26 [form_id] => 3 [name] => Is the property well maintained structurally sound and secured against wind and rain? [slug] => customers_is-the-property-well-maintained-structurally-sound-and-secured-against-wind-and-rain_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 28 [bs_column] => 12 ) [24] => Array ( [id] => 27 [form_id] => 3 [name] => Is the property undergoing renovations over $75,000, OR, under construction, OR, to be demolished? [slug] => customers_is-the-property-undergoing-renovations-over-75000-or-under-construction-or-to-be-demolished_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 29 [bs_column] => 12 ) [25] => Array ( [id] => 28 [form_id] => 3 [name] => Is your home location on a site exceeding 20,000 square metres? [slug] => customers_is-your-home-location-on-a-site-exceeding-20000-square-metres_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 30 [bs_column] => 12 ) [26] => Array ( [id] => 29 [form_id] => 3 [name] => Has the land where the building or contents are been flooded or inundated by water more than once in the last 10 years? [slug] => customers_has-the-land-where-the-building-or-contents-are-been-flooded-or-inundated-by-water-more-than-once-in-the-last-10-years_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 31 [bs_column] => 12 ) [27] => Array ( [id] => 30 [form_id] => 3 [name] => Is there a pool on your property? [slug] => customers_is-there-a-pool-on-your-property_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 32 [bs_column] => 6 ) [28] => Array ( [id] => 31 [form_id] => 3 [name] => Building type: [slug] => customers_building-type_checkbox [required] => 0 [type] => checkbox [options] => House on slab/foundation,House on poles,Villa/Townhouse,Unit/Flat,Terrace/semi,Course of construction,Granny flat,Heritage property,Holiday home,Mobile home,Display home,Nursing home Caravan,Retirement village [field_order] => 33 [bs_column] => 12 ) [29] => Array ( [id] => 32 [form_id] => 3 [name] => Floor Construction: [slug] => customers_floor-construction_checkbox [required] => 0 [type] => checkbox [options] => Concrete,Wood [field_order] => 31 [bs_column] => 6 ) [30] => Array ( [id] => 34 [form_id] => 3 [name] => Wall construction:If mixed construction, please detail % of each [slug] => customers_wall-constructionif-mixed-construction-please-detail-of-each_checkbox [required] => 0 [type] => checkbox [options] => Double Brick Timber/,Brick Veneer Steel,Weatherboard,Fibro/Asbestos,Concrete/Hebel,Stone/ Sandstone,Cement,Polystyrene/EP,Mud brick [field_order] => 33 [bs_column] => 12 ) [31] => Array ( [id] => 35 [form_id] => 3 [name] => other [slug] => customers_other_input [required] => 0 [type] => input [options] => [field_order] => 34 [bs_column] => 12 ) [32] => Array ( [id] => 36 [form_id] => 3 [name] => Roof: [slug] => customers_roof_checkbox [required] => 0 [type] => checkbox [options] => Cement Tiles,Iron,Slate,Terracotta,Colour bond,Steel,Wood [field_order] => 35 [bs_column] => 12 ) [33] => Array ( [id] => 37 [form_id] => 3 [name] => other [slug] => customers_other_input [required] => 0 [type] => input [options] => [field_order] => 36 [bs_column] => 12 ) [34] => Array ( [id] => 38 [form_id] => 3 [name] => Sandwich Foam Panel construction (EPS) [slug] => customers_sandwich-foam-panel-construction-eps_checkbox [required] => 0 [type] => checkbox [options] => Yes,No [field_order] => 37 [bs_column] => 6 ) [35] => Array ( [id] => 39 [form_id] => 3 [name] => If yes, percentage % [slug] => customers_if-yes-percentage-_input [required] => 0 [type] => input [options] => [field_order] => 38 [bs_column] => 6 ) )`
php代码
$max_six_per_row = 2;
$max_four_per_row = 3;
$item_count_two = 0;
$item_count_three = 0;
$fields_html .= '<table><tbody>';
foreach ($fields as $field) {
$field['name'] = $field['name'];
if ($field['bs_column'] == 12) {
$fields_html .="<tr><td width='100%'>".$field['name'] ."</td></tr>";
}
if ($field['bs_column'] == 6) {
if ($item_count_two == 0)
{
$fields_html .="<tr>";
}
$fields_html .="<td width='50%'>".$field['name'] ."</td>";
if ($item_count_two == $max_six_per_row)
{
$fields_html .="</tr>";
$item_count_two = 0;
}
$item_count_two++;
}
if ($field['bs_column'] == 4) {
if ($item_count_three == 0)
{
$fields_html .="<tr>";
}
$fields_html .="<td>".$field['name'] ."</td>";
if ($item_count_three == $max_four_per_row)
{
$fields_html .="</tr>";
$item_count_three = 0;
}
$item_count_three++;
}
}
$fields_html .= '</tbody></table>';
echo $fields_html;
【问题讨论】:
-
如果您计划最多有 3 个 td,那么您的所有行都应该有 3 个 td。您需要在需要时使用 COLSPAN 将所有 3 个 td 加入 1 或 2。
-
问题正在打开
<tr>并关闭</tr>。在上面的循环中,当bs_column==6有两行时,它打开<tr>一次并关闭</tr>两次。 -
你的逻辑让我无法理解。我知道您想每行打印 1、2 或 3 个 td。我弄错了吗?在 bs_column==6 部分你测试 $item_count_two == 0,这是真的,所以你插入一个 tr。然后添加 1 个 td 单元格。然后你测试 $item_count_two == $max_six_per_row。由于您从不增加 $item_count_two 我看不出该测试将如何通过,因为 $item_count_two 永远不会等于 2。让我仔细考虑一下。之后我会发布答案。
-
我遇到了一个问题。您的 $fields 数组无效。 PHP 区分大小写,因此数组命令是小写的。我取了第一个条目并将其转换为:'$fields = array(0 => array("id" => 1, "form_id" => 3, "name" => "THE APPLICANT", "slug" = > "customers_the-applicant_heading", "required" => 0, "type" => "heading", "options" => array("field_order" => 0, "bs_column" => 12)));'。这看起来正确吗?我必须从一个有效的数组开始。
-
是的,它是有效的数组。如果您将发布带有建议或上述循环更正的答案,这将很有帮助。谢谢@CharlesEF
标签: php arrays loops for-loop foreach