ZVVQ代理分享网

PHP中如何按照某个字段对数组进行排序?

作者:zvvq博客网
导读array('name'=>'王五','age'=>21,'score'=>85)array('name'=>'王五','age'=>21,'score'=>85)array('name'=>'王五','age'=>21,'score'=>85)

在PHP中,数组是一种非常常见的数据类型,用于存储一组相关的数据。当我们需要对数组进行排序时,可以使用PHP提供的sort()函数,但是如果我们需要按照数组中的某个字段进行排序呢?下面就让我们来看看如何实现。


 

首先,我们需要定义一个包含多个元素的数组,每个元素都包含一个或多个字段。例如:

```

$students = array(

array(&;name&; => &;张三&;, &;age&; => , &;score&; => 0),

array(&;name&; => &;李四&;, &;age&; => , &;score&; => 0),

array(&;name&; => &;王五&;, &;age&; => , &;score&; => )

);

```

上面的数组包含三个元素,每个元素都包含三个字段:姓名、年龄和分数。

现在,我们可以使用PHP提供的usort()函数来按照某个字段对数组进行排序。usort()函数需要两个参数:第一个参数是要排序的数组,第二个参数是一个回调函数,用于定义排序规则。回调函数接受两个参数,分别是要比较的两个元素。

例如,如果我们要按照分数从高到低对上面的数组进行排序,可以定义一个回调函数如下:

```

function cmp($a, $b) {

if ($a[&;score&;] == $b[&;score&;]) {

return 0;

}

return ($a[&;score&;] > $b[&;score&;]) ? - : ;

}

```

上面的回调函数中,如果$a和$b的分数相等,则返回0;如果$a的分数大于$b的分数,则返回-,否则返回。这样就可以按照分数从高到低对数组进行排序了。

完整的代码如下:

```

$students = array(

array(&;name&; => &;张三&;, &;age&; => , &;score&; => 0),

array(&;name&; => &;李四&;, &;age&; => , &;score&; => 0),

array(&;name&; => &;王五&;, &;age&; => , &;score&; => )

);

function cmp($a, $b) {

if ($a[&;score&;] == $b[&;score&;]) {

return 0;

}

return ($a[&;score&;] > $b[&;score&;]) ? - : ;

}

usort($students, "cmp");

print_r($students);

```

输出结果如下:

```

Array

(

[0] => Array

(

[name] => 李四

[age] =>

[score] => 0

)

[] => Array

(

[name] => 王五

[age] =>

[score] =>

)

[] => Array

(

[name] => 张三

[age] =>

[score] => 0

)

)

```

可以看到,数组已经按照分数从高到低排序了。

除了按照分数排序,我们也可以按照其他字段进行排序,只需要修改回调函数中的比较规则即可。例如,如果要按照年龄从小到大排序,可以修改回调函数如下:

```

function cmp($a, $b) {

if ($a[&;age&;] == $b[&;age&;]) {

return 0;

}

return ($a[&;age&;] < $b[&;age&;]) ? - : ;

}

```

这样就可以按照年龄从小到大对数组进行排序了。

按照字段对PHP数组排序可以使用usort()函数,并通过定义回调函数来定义排序规则。只需要修改回调函数中的比较规则,就可以按照不同的字段进行排序。