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

                (

                )

 

            )

 

        )

 

    )

 

)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值