PHP table 中的多维数组计数和求和
PHP Multi-dimensional array count and sum in table
我的示例是关于 table 的 table 教师,grades/groups 和 PHP 生成的学生。我想计算每行一个年级的人数(如下面的 table 所示)。
您可以在下面看到想象中生成的 table 和结果。我用 foreaches 和 for 循环尝试了一些解决方案但是效果不佳。我不明白获得井周期的正确逻辑,所以我不知道如何解决它。
你能帮忙猜猜逻辑并写出工作(例如foreach, 对于 周期)PHP 代码?
这是我的多维数组:
(!! 一个年级可能会有更多人分组,比如 老师 3 年级 array !!)
$array = array (
"teacher1" => array(
"grades" => array(
"grade 4" => array(
0 => 1,
),
),
"sum" => 1,
"name" => "teacher1",
),
"teacher2" => array(
"grades" => array(
"grade 8" => array(
0 => 5,
),
"grade 1" => array(
0 => 4,
),
),
"sum" => 9,
"name" => "teacher2",
),
"teacher3" => array(
"grades" => array(
"grade 1" => array(
0 => 2,
1 => 1,
),
"grade 4" => array(
0 => 1,
),
"grade 5" => array(
0 => 1,
),
"grade 2" => array(
0 => 1,
),
),
"sum" => 6,
"name" => "teacher3",
),
);
想象的table结果:
感谢大家的帮助!
希望此解决方案对您的情况有所帮助。
foreach($array as $teacher)
{
echo $teacher['name'];
echo "<br>";
$grades = $teacher['grades'];
foreach($grades as $key => $grade)
{
$count = 0;
foreach($grade as $arr)
{
$count += $arr;
}
echo "Total students in " . $key . " is = " . $count . "<br>";
}
echo "<br>";
}
像这样庞大的数据结构需要在开始时进行大量规划,而您 运行 遇到麻烦的地方是最里面的数组。您没有坚持使用命名数组,而是切换到索引数组,其中索引毫无意义。
你想要的输出基本上是一个平面 table(如果它是一个数据库 table,应该被规范化;那么你不会被限制为每个年级 5 人),其中每个人前 32 列是唯一字段。
如果你的数据结构是这样的,会容易得多:
$array = array (
"teacher1" => array(
"grades" => array(
"grade 4" => array(
"1" => true,
),
),
"sum" => 1,
"name" => "teacher1",
),
"teacher2" => array(
"grades" => array(
"grade 8" => array(
"5" => true,
),
"grade 1" => array(
"4" => true,
),
),
"sum" => 9,
"name" => "teacher2",
),
"teacher3" => array(
"grades" => array(
"grade 1" => array(
"2" => true,
"1" => true,
),
"grade 4" => array(
"1" => true,
),
"grade 5" => array(
"1" => true,
),
"grade 2" => array(
"1" => true,
),
),
"sum" => 6,
"name" => "teacher3",
),
);
现在,table 的前 32 个单元格中的每一个都有一个不同的名称,即
if(isset($array['teacher2']['grades']['grade1']['4'])) { echo ‘x'; }
当然,问题在于输入起来相当冗长。您自然会希望使用 foreach 循环来深入研究数据结构,并且您可以为遇到的每个“人数”键设置计数数组……但是哎呀!
如果这是学校的项目,那就继续吧;大多数学校课程都不涉及做事的实用方法。在现实世界中,您会使用数据库而不是这个笨重的数组。
我的示例是关于 table 的 table 教师,grades/groups 和 PHP 生成的学生。我想计算每行一个年级的人数(如下面的 table 所示)。 您可以在下面看到想象中生成的 table 和结果。我用 foreaches 和 for 循环尝试了一些解决方案但是效果不佳。我不明白获得井周期的正确逻辑,所以我不知道如何解决它。
你能帮忙猜猜逻辑并写出工作(例如foreach, 对于 周期)PHP 代码?
这是我的多维数组: (!! 一个年级可能会有更多人分组,比如 老师 3 年级 array !!)
$array = array (
"teacher1" => array(
"grades" => array(
"grade 4" => array(
0 => 1,
),
),
"sum" => 1,
"name" => "teacher1",
),
"teacher2" => array(
"grades" => array(
"grade 8" => array(
0 => 5,
),
"grade 1" => array(
0 => 4,
),
),
"sum" => 9,
"name" => "teacher2",
),
"teacher3" => array(
"grades" => array(
"grade 1" => array(
0 => 2,
1 => 1,
),
"grade 4" => array(
0 => 1,
),
"grade 5" => array(
0 => 1,
),
"grade 2" => array(
0 => 1,
),
),
"sum" => 6,
"name" => "teacher3",
),
);
想象的table结果:
感谢大家的帮助!
希望此解决方案对您的情况有所帮助。
foreach($array as $teacher)
{
echo $teacher['name'];
echo "<br>";
$grades = $teacher['grades'];
foreach($grades as $key => $grade)
{
$count = 0;
foreach($grade as $arr)
{
$count += $arr;
}
echo "Total students in " . $key . " is = " . $count . "<br>";
}
echo "<br>";
}
像这样庞大的数据结构需要在开始时进行大量规划,而您 运行 遇到麻烦的地方是最里面的数组。您没有坚持使用命名数组,而是切换到索引数组,其中索引毫无意义。
你想要的输出基本上是一个平面 table(如果它是一个数据库 table,应该被规范化;那么你不会被限制为每个年级 5 人),其中每个人前 32 列是唯一字段。
如果你的数据结构是这样的,会容易得多:
$array = array (
"teacher1" => array(
"grades" => array(
"grade 4" => array(
"1" => true,
),
),
"sum" => 1,
"name" => "teacher1",
),
"teacher2" => array(
"grades" => array(
"grade 8" => array(
"5" => true,
),
"grade 1" => array(
"4" => true,
),
),
"sum" => 9,
"name" => "teacher2",
),
"teacher3" => array(
"grades" => array(
"grade 1" => array(
"2" => true,
"1" => true,
),
"grade 4" => array(
"1" => true,
),
"grade 5" => array(
"1" => true,
),
"grade 2" => array(
"1" => true,
),
),
"sum" => 6,
"name" => "teacher3",
),
);
现在,table 的前 32 个单元格中的每一个都有一个不同的名称,即
if(isset($array['teacher2']['grades']['grade1']['4'])) { echo ‘x'; }
当然,问题在于输入起来相当冗长。您自然会希望使用 foreach 循环来深入研究数据结构,并且您可以为遇到的每个“人数”键设置计数数组……但是哎呀!
如果这是学校的项目,那就继续吧;大多数学校课程都不涉及做事的实用方法。在现实世界中,您会使用数据库而不是这个笨重的数组。