十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
usort
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供成都网站设计、成都网站制作、网站策划、网页设计、域名申请、虚拟空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
(PHP 4, PHP 5, PHP 7, PHP 8)
usort — 使用用户自定义的比较函数对数组中的值进行排序
说明
usort (array $array , callable $value_compare_func ): bool
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
注意:
如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。
注意: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
参数
array
输入的数组
cmp_function
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
callback(mixed $a, mixed $b): int
警告
Returning non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal.
返回值
成功时返回 true, 或者在失败时返回 false。
范例
示例 #1 usort() 例子
$value) {
echo "$key: $value\n";
}
?
以上例程会输出:
0: 1
1: 2
2: 3
3: 5
4: 6
注意:
很明显在这个小例子中用 sort() 函数更合适。
1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的,不能动态变化 。
2、var arr []int 这时arr就是一个slice 切片 。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用 。
4、数组创建后,如果没有赋值,有默认值如下:
数值类型数组: 默认值为 0
字符串数组: 默认值为 ""
bool数组: 默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递 ,因此会进行值拷贝。 数组间不会相互影响。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式)。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确,因为[3]int类型传给[3]int类型合法。
函数声明后面要加分号
/****************************** 改进的冒泡排序 ******************************
函 数 名:int BubbleImprovedSort(int a[], int n)
参 数:int a[]---待排序的数据
int len---待排序数据的个数,也即数组a的长度
功 能:完成改进的冒泡排序
返 回 值:排序过程中发生交换的次数
基本思想:对冒泡排序常见的改进方法是加入一标志性变量exchange,用于标志某一趟
排序过程中是否有数据交换,如果进行某一趟排序时并没有进行数据交换,
则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程。
说 明:排序好的数据依然存放在数组a中
*****************************************************************************/
int BubbleImprovedSort(int a[], int len)
{
int i, j, temp, CompareNum=0;
int exchange; // 交换标志,若某趟排序中所有元素位置未发生交换则说明排序完成
for(i=0; ilen-1; i++) // 最多需len-1趟排序
{
exchange = 0;
for(j=0; jlen-i-1; j++) // 每趟排序最多需要len-i-1次比较
{
if(a[j] a[j+1]) // 将较大的值放到后面
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
exchange = 1;
}
CompareNum++; // 比较次数加1
}
if(exchange == 0) // 说明某趟排序没有发生交换,也即排序完成,可以提前终止
return CompareNum;
}
return CompareNum;
}
数组元素的排序有两种方法,
一样举一个例子吧:
1、:
#includestdio.h
#includestdlib.h
#includetime.h
#define N 20
void main()
{
int a[N],i,j,k,temp;
srand((unsigned) time(NULL));
for(i=0;iN;i++)
a[i]=rand()%1000;
printf("排序以前:\n");
for(i=0;iN;i++)
printf("%d\t",a[i]);
for(i=0;iN;i++)
{
k=i;
for(j=i+1;jN;j++)
{
if(a[j]a[k])
k=j;
}
if(k!=i)
temp=a[i],a[i]=a[k],a[k]=temp;
}
printf("\n排序后的数组:\n");
for(i=0;iN;i++)
printf("%d\t",a[i]);
}
2、
#includestdio.h
#includestdlib.h
#includetime.h
#define N 20
void main()
{
int a[N],i,j,temp,flag;
srand((unsigned) time(NULL));
for(i=0;iN;i++)
a[i]=rand()%1000;
printf("排序以前:\n");
for(i=0;iN;i++)
printf("%d\t",a[i]);
for(i=0;iN;i++)
{ flag=0;
for(j=0;jN-i;j++)
{
if(a[j]a[j-1])
{
temp=a[j],a[j]=a[j-1],a[j-1]=temp;
flag=1;
}
}
if(flag==0)
break;
}
printf("\n排序以后的数组:\n");
for(i=0;iN;i++)
printf("%d\t",a[i]);
}
因为char *strings[]不是指针而是指针数组,那么
temp = strings[top];
strings[top] = strings[seek];
strings[seek] = temp;
这种交换交换的就是主调函数中的数组中的指针,把指向字符串的指针顺序改变了,当然按次序输出就达到排序目的了……
数组是一个由 固定长度 的 特定类型元素 组成的序列,一个数组可以由零个或多个元素组成。 数组是值类型
数组的每个元素都可以通过索引下标来访问,索引下标的范围是从0开始到数组长度减1的位置,内置函数 len() 可以返回数组中元素的个数。
2.类型的打印,结果的第二种打印方式
3.对元素的修改或者赋值
4.判断数组是否相等:长度、类型
4.数组的地址:连续存储的空间
5.数组的赋值、地址、取值
6.数组的默认值
7.数组的初始化
8.数组的逆置
9.求数组的最大值、最小值、平均值
10.对数组字符串进行连接
11.冒泡排序法的实现
12.数组做函数的参数
13.二维数组:赋值和地址
14.二维数组:打印和输出
15. 指针数组,每一个元素都是地址
17.数组的内存分配