Rumah > pembangunan bahagian belakang > tutorial php > php 二维数组根据相同id求和,并且限制条件

php 二维数组根据相同id求和,并且限制条件

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-06 20:10:25
asal
1277 orang telah melayarinya

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

<code><?php header('Content-Type: text/plain;charset=utf-8');

 

$arr = array

(

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '学雷锋做好事',

            'cname' => '社会活动模块',

            'period' => '16',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '会计从业资格证',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '教师资格证',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530111',

            'stu_name' => '雷雨',

            'stu_major' => '13视传1班',

            'depart_name' => '设计学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '15',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530108',

            'stu_name' => '周励',

            'stu_major' => '13产设1班',

            'depart_name' => '设计学院',

            'project_name' => 'DOM编程艺术',

            'cname' => '科技创新模块',

            'period' => '0',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530116',

            'stu_name' => '高颜',

            'stu_major' => '13陶艺2班',

            'depart_name' => '陶美学院',

            'project_name' => '音乐',

            'cname' => '文体艺术模块',

            'period' => '0',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530110',

            'stu_name' => '程风',

            'stu_major' => '13信管1班',

            'depart_name' => '信息学院',

            'project_name' => 'JavaScript高级程序设计',

            'cname' => '思想道德模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530112',

            'stu_name' => '苏环',

            'stu_major' => '13公事1班',

            'depart_name' => '人文学院',

            'project_name' => '音乐',

            'cname' => '文体艺术模块',

            'period' => '0',

            'credit' => '0'

        ),

   array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => 'DOM编程艺术',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530108',

            'stu_name' => '周励',

            'stu_major' => '13产设1班',

            'depart_name' => '设计学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '12',

            'credit' => '0'

        ),

 

);

    $tmp  = array();

    foreach($arr as $v) {

 

        if(!isset($tmp[$v['stu_id']])){

            $tmp[$v['stu_id']] = $v;

        }else {

            $tmp[$v['stu_id']]['period'] += $v['period'];

        }

 

    }

         

     

    echo "<pre class="brush:php;toolbar:false">";

    // 二维数组

    print_r(array_values($tmp));

 

?>

Salin selepas log masuk
Salin selepas log masuk

$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的period(学时),我的实现方案是这样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>    $tmp  = array();

    foreach($arr as $v) {

 

        if(!isset($tmp[$v['stu_id']])){

            $tmp[$v['stu_id']] = $v;

        }else {

            $tmp[$v['stu_id']]['period'] += $v['period'];

        }

 

    }

         

     

    echo "<pre class="brush:php;toolbar:false">";

    // 二维数组

    print_r(array_values($tmp));

Salin selepas log masuk
Salin selepas log masuk

但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。

不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。

回复内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

<code><?php header('Content-Type: text/plain;charset=utf-8');

 

$arr = array

(

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '学雷锋做好事',

            'cname' => '社会活动模块',

            'period' => '16',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '会计从业资格证',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '教师资格证',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530111',

            'stu_name' => '雷雨',

            'stu_major' => '13视传1班',

            'depart_name' => '设计学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '15',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530108',

            'stu_name' => '周励',

            'stu_major' => '13产设1班',

            'depart_name' => '设计学院',

            'project_name' => 'DOM编程艺术',

            'cname' => '科技创新模块',

            'period' => '0',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530116',

            'stu_name' => '高颜',

            'stu_major' => '13陶艺2班',

            'depart_name' => '陶美学院',

            'project_name' => '音乐',

            'cname' => '文体艺术模块',

            'period' => '0',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530110',

            'stu_name' => '程风',

            'stu_major' => '13信管1班',

            'depart_name' => '信息学院',

            'project_name' => 'JavaScript高级程序设计',

            'cname' => '思想道德模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530112',

            'stu_name' => '苏环',

            'stu_major' => '13公事1班',

            'depart_name' => '人文学院',

            'project_name' => '音乐',

            'cname' => '文体艺术模块',

            'period' => '0',

            'credit' => '0'

        ),

   array

        (

            'term' => '2015-2016-2',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530109',

            'stu_name' => '罗成',

            'stu_major' => '12热工1班',

            'depart_name' => '材料学院',

            'project_name' => 'DOM编程艺术',

            'cname' => '科技创新模块',

            'period' => '12',

            'credit' => '0'

        ),

    array

        (

            'term' => '2015-2016-1',

            'stu_id' => '201210530108',

            'stu_name' => '周励',

            'stu_major' => '13产设1班',

            'depart_name' => '设计学院',

            'project_name' => '美术学',

            'cname' => '文体艺术模块',

            'period' => '12',

            'credit' => '0'

        ),

 

);

    $tmp  = array();

    foreach($arr as $v) {

 

        if(!isset($tmp[$v['stu_id']])){

            $tmp[$v['stu_id']] = $v;

        }else {

            $tmp[$v['stu_id']]['period'] += $v['period'];

        }

 

    }

         

     

    echo "<pre class="brush:php;toolbar:false">";

    // 二维数组

    print_r(array_values($tmp));

 

?>

Salin selepas log masuk
Salin selepas log masuk

$arr是一个二维数组,数组里有相同的stu_id(学生学号),根据stu_id(学生学号)的period(学时),计算总的period(学时),我的实现方案是这样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>    $tmp  = array();

    foreach($arr as $v) {

 

        if(!isset($tmp[$v['stu_id']])){

            $tmp[$v['stu_id']] = $v;

        }else {

            $tmp[$v['stu_id']]['period'] += $v['period'];

        }

 

    }

         

     

    echo "<pre class="brush:php;toolbar:false">";

    // 二维数组

    print_r(array_values($tmp));

Salin selepas log masuk
Salin selepas log masuk

但是,这只是实现了period(学时)相加。
我还需要加限制条件计算出数组和每个学生的总学分(credit),就是根据cname(模块名称),某个学生的每个模块(共四个模块,分别是思想道德模块、科技创新模块、文体艺术模块、社会活动模块)都需要大于等于16(四个模块同时都满足大于等于16),则这个学生的总学分为6.否则为0。

不知道怎么实现,特请教各位大神,在此先谢谢各位解答了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<code>$res = array();

 

        foreach($arr as $key => $value){

            if(!array_key_exists($value['stu_id'],$res)){

                 

                $res[$value['stu_id']][$value['cname']] = $value['period'];

            }else{

                if(array_key_exists($value['cname'],$res[$value['stu_id']])){

                    $res[$value['stu_id']][$value['cname']] +=$value['period'];

                }else{

                    $res[$value['stu_id']][$value['cname']] = $value['period'];

                }

            }

        }

         

        $tmp  = array();

        foreach($arr as $v) {

 

            if(!isset($tmp[$v['stu_id']])){

                $tmp[$v['stu_id']] = $v;

            }else {

                $tmp[$v['stu_id']]['period'] += $v['period'];

            }

 

        }

 

        $result = array();

        foreach ($res as $key => $value) {

              $result[$key]['total_period'] = array_sum($value);

 

            foreach($value as $key1 => $value1){

                if($value1 $value) {

            $lastData[$key]['term'] = $value['term'];

            $lastData[$key]['stu_id'] = $value['stu_id'];

              $lastData[$key]['stu_name'] = $value['stu_name'];

              $lastData[$key]["stu_major"] = $value['stu_major'];

              $lastData[$key]["depart_name"] = $value['depart_name'];

        }

        foreach ($result as $key => $value) {

            $lastData[$key]["total_period"] = $value['total_period'];

              $lastData[$key]["total_credit"] = $value['total_credit'];

        }

 

         

        $theLastData = array_values($lastData);

 

        echo "<pre class="brush:php;toolbar:false">";

        print_r($theLastData);

        exit;

Salin selepas log masuk

你的数据怎么来的 是从数据库中读取的吗? 如果是 那么你的这些问题直接查询就出来了, 不需要用php逻辑处理~ 如果不是 那么逐条把数据存到数据库中 再查询得到想要的结果

Label berkaitan:
php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan