![PHP面试一战到底](https://wfqqreader-1252317822.image.myqcloud.com/cover/891/44509891/b_44509891.jpg)
2.1 布尔类型
2.1.1 概念
布尔(Boolean)类型用来表示逻辑里的真(TRUE)或假(FALSE)。
布尔类型最多的用途有两个:
(1)设置FLAG,通常在循环外设置FLAG的初始值,在循环内满足一定条件时变更FLAG的值,这样查看FLAG的值,就可以知道循环逻辑中是否满足一定条件的实例。例如冒泡排序就用到了设置FLAG值的方法。
(2)用作控制逻辑,例如比较版本号:
![](https://epubservercos.yuewen.com/9146EB/23721566801954006/epubprivate/OEBPS/Images/Figure-P38_39554.jpg?sign=1739226974-u2gtq0PYKP8UDI8Mnxnbn8mtzCEilE38-0-cac514bdc4a06758d96e5bf2f8942fd2)
2.1.2 面试题:冒泡排序
题目描述:写一下冒泡排序算法。
冒泡排序是经典的排序方式之一,算法复杂度为O(n2)。其算法的核心是,对一个n个元素数组,需要进行n-1轮的循环比较。每一轮的循环中,将相邻的元素进行比较,如果左边的元素值大于右边的元素,则将两者的位置交换;每一轮结束后,最大值的元素就会放置在最右的位置;这样循环结束后,所有的元素都会按从小到大的顺序排列完成。
例如对数组[6,5,4,1,2,3]用冒泡方法进行排序:
原始数组: [6,5,4,1,2,3]
第一次循环:[5,4,1,2,3,6]
第二次循环:[4,1,2,3,5,6]
第三次循环:[1,2,3,4,5,6]
第四次循环:[1,2,3,4,5,6]
第五次循环:[1,2,3,4,5,6]
大家注意到第四、五次循环时,并没有发生位置交换。这时可以设置一个FLAG,如果一个循环中没有位置交换,则说明排序已完成,退出循环即可。这样一个FLAG变量的设置,减少了一次循环的时间。
在其他的场合,也可以设置合适的FLAG,当满足条件时更改FLAG的值,然后检测FLAG的值决定是否退出循环,可以减少循环的次数,提高程序的效率。
程序代码如下:(源码文件:ch02/bubble_sort.php)
![](https://epubservercos.yuewen.com/9146EB/23721566801954006/epubprivate/OEBPS/Images/Figure-P39_39560.jpg?sign=1739226974-o5R7JGuuPXi9bhP06Oowi5xM7eO87amO-0-2a755aed0a48e84d70ba8d8a1c5f56f8)
2.1.3 类型转换
在控制逻辑中,所有表达式的值都会先转换为boolean值再进行比较,表2-1列出了常见的类型转换。
表2-1 其他类型转换为布尔类型
![](https://epubservercos.yuewen.com/9146EB/23721566801954006/epubprivate/OEBPS/Images/Figure-T40_39562.jpg?sign=1739226974-kutYWI5OK54MDLSSqhzpHIpYhQbynyFg-0-e311c9d085f3aa06ed08f5415e70de18)
2.1.4 面试题:布尔数据比较
题目描述:不同类型数据与Boolean的比较,判断其输出是什么?
程序代码如下:(源码文件:ch02/boolean.php)
![](https://epubservercos.yuewen.com/9146EB/23721566801954006/epubprivate/OEBPS/Images/Figure-P40_41207.jpg?sign=1739226974-TGgo9vEjdOeH1O8hWSK1TlztjKC5rTrR-0-c8aedfd41f8a3a5e848a330cec09b983)
点评:考察点是各种数据类型到boolean的转换,参考表2-1,读者可以实际运行一下程序,思考为什么会是这样的结果。