7.31学习笔记--list函数、each函数 foreach函数

list函数:它的功能:将索引数组下标为0的对应我变量1,下标1的对应变量2,依此类推。

list( ,  , $three) = array('张三' ,'李四' ,'王五');

echo '$one----'.$one.'<br />';
echo '$two----'.$two.'<br />';
echo '$three----'.$three.'<br />';

//输出如下:
$one----
$two----
$three----王五

注:无匹配的输出显示为空,有匹配的就输出

each函数:

功能:传入一个数组。它会将其中的一个元素拆为个新数组。每次执行这样操作一个元素。执行一次先后移动一次,同样的方式操作下一个数组元素。执行到最后,返回false。

函数功能
array_shift弹出数组中的第一个元素         然后改变数组原有下标
array_unshift在数组的开始处压入元素         然后改变数组原有下标
array_push向数组的末尾处压入元素
array_pop弹出数组末尾的最后一个元素
current读出指针当前位置的值
key读出指针当前位置的键
next指针向下移
prev向上移
reset指针到开始处
end指针到结束处

php 数组的常用函数(默写级别)

函数名功能 
array_combine()生成一个数组,用一个数组的值作为键名,另一个数组值作为值 
range()创建并返回一个包含指定范围的元素的数组。 
compact()创建一个由参数所带变量组成的数组 
array_fill()用给定的值生成数组 
array_chunk()把一个数组分割为新的数组块 
array_merge()把两个或多个数组合并为一个数组 
array_slice()在数组中根据条件取出一段值,并返回 
array_diff()返回两个数组的差集数组 
array_search()在数组中搜索给定的值,如果成功则返回相应的键名 
array_splice()把数组中的一部分去掉并用其它值取代 
array_sum()计算数组中所有值的和 
in_array()检查数组中是否存在某个值 
array_key_exists()检查给定的键名或索引是否存在于数组中 
shuffle()将数组打乱,保留键值 
count()计算数组中的单元数目或对象中的属性个数 
array_flip()返回一个键值反转后的数组 
array_keys()返回数组所有的键,组成一个数组 
array_values()返回数组中所有值,组成一个数组 
array_reverse()返回一个元素顺序相反的数组 
array_count_values()统计数组中所有的值出现的次数 
array_rand()从数组中随机抽取一个或多个元素,注意是键名 
array_unique()删除重复值,返回剩余数组 
sort()按升序对给定数组的值排序,不保留键名 
rsort()对数组逆向排序,不保留键名 
asort()对数组排序,保持索引关系 
arsort()对数组逆向排序,保持索引关系 
ksort()按键名对数组排序 
krsort()将数组按照键逆向排序 
natsort()用自然顺序算法对数组中的元素排序 
natcasesort()自然排序,不区分大小写 
array_filter()去掉数组中的空元素或者预定元素 
extract将键变为变量名,将值变为变量值

 

、项目中实战应用

说明:在项目中,数组的变化好多,当然foreach功不可没!当然也可以用while、each等等方法,但是foreach最为方便了!下边简要说一下几个常见的项目实战!

实战1:将二维关联数组变为一维普通数组

还是第四列出关联二维数组,如下:

?

1

2

3

4

5

6

$d = array(

  array('id'=>'11','name'=>'Tom'),

  array('id'=>'22','name'=>'Mary'),

  array('id'=>'33','name'=>'Peter'),

  array('id'=>'44','name'=>'Jack')

);

现在我们只要 name 一列的内容,当然我们可以用以下的方法来实现,

?

1

2

3

4

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

  echo ($value['name']);

  echo "<br/>";

}

但有时候我们不得不将之列为一个一维数组,于是我们就有了以下的方法:

?

1

2

3

4

5

6

//获取name列作为一维数组

$nameArr = array(); //name列

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

  $nameArr[] = $value['name'];

}

print_r($nameArr);

以上通过赋空数组值,foreach 这个空数组等于我们的值,就得到了一个新的数组!以上代码的结果如下:

?

1

2

3

4

5

6

7

Array

(

  [0] => Tom

  [1] => Mary

  [2] => Peter

  [3] => Jack

)

这个数组明显是:一维普通数组,如下:

?

1

$d = array('Tom','Mary','Peter','Jack');

好了,将二维关联数组变为一维普通数组就写到了这里!

实战2 :二级分类以及无限级分类

很明显,我们从数据库中取出来的数据就是一个二维数组,而且是二维关联数组。那么,我们怎么取出父分类?怎么取出对应父分类的子分类呢?

首先要说明的是:几乎所有的分类都是一个数据库模式,因此我们十分有必要了解它的结构,还有怎么取出对应的数据!

对于二级分类,为了说明方便,我从网上找一个比较好说明的例子,那就是“新闻分类“!

好了,废话不多说,开始正题!我们先写一个数组。

?

1

2

3

4

5

6

7

8

9

10

//从数据库中取出的分类数据

$original_array = array(

  array('id' => 1,'pid' => 0,'name' => '新闻分类'),

  array('id' => 2,'pid' => 0,'name' => '最新公告'),

  array('id' => 3,'pid' => 1,'name' => '国内新闻'),

  array('id' => 4,'pid' => 1,'name' => '国际新闻'),

  array('id' => 5,'pid' => 0,'name' => '图片分类'),

  array('id' => 6,'pid' => 5,'name' => '新闻图片'),

  array('id' => 7,'pid' => 5,'name' => '其它图片')

);

同时,数据库是这个样子的。

说明:数据库的分类就是这个样子的!取出来的数组也是这个样子的!一般这样子的!

?

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

//从数据库中取出的分类数据

$original_array = array(

  array(

    'id' => 1,

    'pid' => 0,

    'name' => '新闻分类'

  ),

  array(

    'id' => 2,

    'pid' => 0,

    'name' => '最新公告'

  ),

  array(

    'id' => 3,

    'pid' => 1,

    'name' => '国内新闻'

  ),

  array(

    'id' => 4,

    'pid' => 1,

    'name' => '国际新闻'

  ),

  array(

    'id' => 5,

    'pid' => 0,

    'name' => '图片分类'

  ),

  array(

    'id' => 6,

    'pid' => 5,

    'name' => '新闻图片'

  ),

  array(

    'id' => 7,

    'pid' => 5,

    'name' => '其它图片'

  )

);

那么首先我们得知道我们想要的结果是什么样子呢?这一点:我们必要知道!(以前我对这方面了解比较不深,又常用开源程序,因此导致我不怎么会写这方面了)

我们最终想要的结果是这样子的!(不怕大家笑话,这一点我请一个朋友帮的忙才解决的!)

?

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

//整理后的分类数据

$output_array = array(

  array(

    'id' => 1,

    'pid' => 0,

    'name' => '新闻分类',

    'children' => array(

      array(

        'id' => 3,

        'pid' => 1,

        'name' => '国内新闻'

      ),

      array(

        'id' => 4,

        'pid' => 1,

        'name' => '国际新闻'

      ),

    ),

  ),

  array(

    'id' => 2,

    'pid' => 0,

    'name' => '最新公告',

  ),

  array(

    'id' => 5,

    'pid' => 0,

    'name' => '图片分类',

    'children' => array(

      array(

        'id' => 6,

        'pid' => 5,

        'name' => '新闻图片'

      ),

      array(

        'id' => 7,

        'pid' => 5,

        'name' => '其它图片'

      ),

    ),

  ),

);

很明显,这里数组多了一个字段,就是 children!

那么,怎么 从 $original_array 变为 $output_array呢?这里有我一个朋友做的函数,当然也用到 foreach!

函数如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

//整理函数

/**

 * 生成无限级树算法

 * @author Baiyu 2014-04-01

 * @param array $arr        输入数组

 * @param number $pid        根级的pid

 * @param string $column_name    列名,id|pid父id的名字|children子数组的键名

 * @return array $ret

 */

function make_tree($arr, $pid = 0, $column_name = 'id|pid|children') {

  list($idname, $pidname, $cldname) = explode('|', $column_name);

  $ret = array();

  foreach ($arr as $k => $v) {

    if ($v [$pidname] == $pid) {

      $tmp = $arr [$k];

      unset($arr [$k]);

      $tmp [$cldname] = make_tree($arr, $v [$idname], $column_name);

      $ret [] = $tmp;

    }

  }

  return $ret;

}

那们怎么使用呢?

?

1

2

//整理函数的使用

$output_array = make_tree($original_array);

完整使用方法如下:

?

1

$output_array =make_tree($arr, 0, 'id|pid|children')

函数之后,我们这样调用就得到了一级分类与二级分类!

?

1

2

3

4

5

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

  echo '<h2>'.$value['name'].'</h2>';

  foreach ($value['children'] as $key => $value) {

    echo $value['name'].',';

}

结果如下:

附:$output_array 这个数组,我们使用print_r,就可以得到如下的结果!

?

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

Array

(

  [0] => Array

    (

      [id] => 1

      [pid] => 0

      [name] => 新闻分类

      [children] => Array

        (

          [0] => Array

            (

              [id] => 3

              [pid] => 1

              [name] => 国内新闻

              [children] => Array

                (

                )

 

            )

 

          [1] => Array

            (

              [id] => 4

              [pid] => 1

              [name] => 国际新闻

              [children] => Array

                (

                )

 

            )

 

        )

 

    )

 

  [1] => Array

    (

      [id] => 2

      [pid] => 0

      [name] => 最新公告

      [children] => Array

        (

        )

 

    )

 

  [2] => Array

    (

      [id] => 5

      [pid] => 0

      [name] => 图片分类

      [children] => Array

        (

          [0] => Array

            (

              [id] => 6

              [pid] => 5

              [name] => 新闻图片

              [children] => Array

                (

                )

 

            )

 

          [1] => Array

            (

              [id] => 7

              [pid] => 5

              [name] => 其它图片

              [children] => Array

                (

                )

 

            )

 

        )

 

    )

 

)

 

以下是求解多元多项式回归的 MATLAB 代码: ```matlab % 输入数据 x1 = [36.4 37.2 37.2 36.2 31.5 28.9 27.2 26.7 26.1 26.1 25.4 25.3 25.4]'; x2 = [50.0 52.0 49.0 51.0 68.0 74.0 83.0 82.0 88.0 88.0 90.0 88.0 87.0]'; x3 = [982.9 982.2 981.8 981.6 982.3 982.6 983.4 983.5 984.0 983.6 984.4 984.5 984.4]'; y = [-7.30 -7.36 -7.35 -7.33 -7.31 -7.30 -7.26 -7.22 -7.21 -7.23 -7.18 -7.17 -7.14]'; % 构建设计矩阵X X = [ones(size(x1)) x1 x2 x3 x1.^2 x1.*x2 x1.*x3 x2.^2 x2.*x3 x3.^2]; % 求解回归系数 beta = X \ y; % 构建预测模型 model = @(x1,x2,x3) beta(1) + beta(2)*x1 + beta(3)*x2 + beta(4)*x3 ... + beta(5)*x1.^2 + beta(6)*x1.*x2 + beta(7)*x1.*x3 ... + beta(8)*x2.^2 + beta(9)*x2.*x3 + beta(10)*x3.^2; % 预测并绘制拟合图 x1fit = min(x1):0.1:max(x1); x2fit = min(x2):0.1:max(x2); x3fit = min(x3):0.1:max(x3); [X1FIT,X2FIT,X3FIT] = meshgrid(x1fit,x2fit,x3fit); YFIT = model(X1FIT,X2FIT,X3FIT); figure; plot3(x1,x2,x3,'o',x1fit,x2fit,x3fit,'*'); hold on; mesh(X1FIT,X2FIT,X3FIT,YFIT); xlabel('x1'); ylabel('x2'); zlabel('x3'); title('拟合图'); % 绘制残差图 YFIT = model(x1,x2,x3); figure; plot(YFIT - y,'o'); xlabel('样本编号'); ylabel('残差'); title('残差图'); ``` 运行上述代码后,会先绘制拟合图,然后绘制残差图。拟合图中,蓝色的点表示原始数据,红色的点表示拟合值,可以看到拟合值与原始数据比较接近;残差图中,横轴表示样本编号,纵轴表示残差,残差的分布应该比较均匀,没有明显的规律。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值